折半查找

来源:互联网 发布:外勤助手 源码下载 编辑:程序博客网 时间:2024/05/08 03:37
#include <stdio.h>int search(int a,int b[],int n){    int mid;    int left = 0;    int right = n - 1;    while(left <= right)    {        mid = (left + right) / 2;        if(b[mid] > a)        {            right = mid - 1;        }        else if(b[mid] == a)//当找到时的判断条件        {            return mid;        }        else        {            left = mid + 1;        }    }    return 0;}int main(){    int arr[] = {1,2,3,4,5,6,7,8,9};    int ret = search(3,arr,9);    printf("%d\n",ret);    return 0;}

总结:

1.通过下标找到范围来比较

2.首先找到5,3比5小在左边,然后在1,2,3里找2,最后在数组中找到3与我们需要的3再对比(3 == b[2])条件成立,则返回一个整型 mid,都是先找到最中间的数来进行比较

3.left = mid +1和right = mid -1都是在调整范围

4.注意前提该数列必须为有序数列



0 0