最基础的二分法算法C

复制代码
int search_digit(int *num,int cnt,int target)
{
        int first = 0;
        int last = cnt - 1;
        int mid;/*
        |x x x x o| -> |x x m x o|
                          x m x
                       

        */
        while(first <= last)
        {
                mid = (first + last) / 2;
                if(num[mid] > target)
                {
                        last = mid - 1;
                }
                else if(num[mid] < target)
                {
                        first = mid + 1;
                }
                else
                {
                        printf("find cnt:[%d] {%d}\n",mid,num[mid]);
                        return 1;
                }
        }
        return 0;
}

int main(void)
{
        int flag = 0;
        int target;
        int num[9] = {0,1,2,3,4,5,7,9,10};

        target = 9;

        while(1)
        {
                flag = search_digit(num,9,target);
                if(flag)
                {
                        printf("find number\n");
                        break;
                }
                else
                {
                        printf("find no number\n");
                }
        }
        return 0;
}
复制代码

 

运行结果:

root@ubuntu:/home/watson/test# ./a.out 
find cnt:[7] {9}
find number
该算法存在bug: 无法查询
 int num[9] = {1,8,2,3,4,5,7,9,10};的8

上述的无法返回通过二分手段查找具体数值(先排序后二分法查找数据)

下期再续二分法乱序查找具体数据