二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列。
1 #include<stdio.h> 2 #define find_num 1023 //定义要查找的数 3 int main(void) 4 { 5 int arry[1024]; 6 for (int i = 0; i < 1024; i++) 7 { 8 arry[i] = i;//二分查找要求必须是有序排列的 9 } 10 int up=arry[0], down=arry[1023], mid; 11 int find_flag = 0;//定义是否查找到的标志位 12 while (up <= down)//如果上 小于等于 下(注意必须要有等于,不然你可以试试查找1023),就查找 13 { 14 mid = (up + down) / 2; 15 printf("up=%d mid=%d down=%d ", arry[up], arry[mid], arry[down]); 16 if (arry[mid] == find_num) 17 { 18 printf("找到了 "); 19 find_flag = 1; 20 break;//跳出循环 21 } 22 else if (arry[mid] < find_num) 23 { 24 up = mid + 1; 25 } 26 else 27 { 28 down= mid - 1; 29 } 30 } 31 if (find_flag == 0) 32 { 33 printf("没有查找到这个数 "); 34 } 35 return 0; 36 }
在最坏的情况下,查找10次,2^10=1024;
Analyze: