最基础的二分法算法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] = {1,8,2,3,4,5,7,9,10}; target = 2; 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
上述的无法返回通过二分手段查找具体数值(先排序后二分法查找数据)
下期再续二分法乱序查找具体数据
原文:https://www.cnblogs.com/real-watson/p/14596722.html