二分查找:查找已排序数组中的某个值
算法过程:
将欲查找元素与数组中间值(a[mid])对比,每次查找的数组大小减半。如果欲查找的值存在于数组中,则必定在某次循环中通过a[mid]返回
1 #include2 3 int main(void){ 4 int i = 0, mid, key, len; 5 puts("enter the length of string:"); 6 scanf("%d", &len);//这里之后原来有一句getchar();为了执行错误1的语句,消除scanf后留下的换行符 7 8 int a[len]; 9 int lo = 0, hi = len - 1;10 mid = (lo + hi)/2;11 puts("enter a string of sorted number:");12 while(i a[mid]){23 lo = mid + 1;24 mid = (lo + hi)/2; 25 }26 else{27 printf("the key %d in string a is a[%d]\n", key, mid);28 break;29 } 30 } 31 if(lo>hi)32 puts("key is not found.\n");33 return 0;35 }
查找的次数最多可能为:log2(N)次(N为数组大小),因为查找次数最多时最后一次查找为2个数中的一个,每次查找都排除掉一半的数,2^x = N,x为查找次数