c语言实现二分查找法代码
二分查找
也称为折半查找
是一种比较高效的查找方法
但是,它有个前提
就是
查找的序列一定要是有序的
查找的序列一定要是有序的
查找的序列一定要是有序的
.
.
.
代码测试
#include <stdio.h>
// 二分查找法
bool search_key(int *src, int size, int key)
{
int low = 0; // 起始位置
int high = size - 1; // 结束位置
int mid = (low + high) / 2; // 中间位置
int count = 0; // 查找花费的次数
while (low < high) {
++count;
mid = (low + high) / 2;
if (key < src[mid]) {
if (key == src[low]) { // 找到啦
printf("查找 %d 成功!\t位置是 src[%d] = %d, \t共查找 %d 次\n", src[low], low, src[low], count);
return true;
}
high = mid - 1;
}
else if (key > src[mid]) {
if (key == src[high]) { // 找到啦
printf("查找 %d 成功!\t位置是 src[%d] = %d, \t共查找 %d 次\n", src[high], high, src[high], count);
return true;
}
low = mid + 1;
}
else if (key == src[mid]) { // 找到啦
printf("查找 %d 成功!\t位置是 src[%d] = %d, \t共查找 %d 次,\n", src[mid], mid, src[mid], count);
return true;
}
}
printf("查找完毕!未能找到相对应的值!\n");
return false;
}
// 主函数
int main(int argc, char **argv)
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
search_key(arr, sizeof(arr) / sizeof(int), 0);
search_key(arr, sizeof(arr) / sizeof(int), 1);
search_key(arr, sizeof(arr) / sizeof(int), 2);
search_key(arr, sizeof(arr) / sizeof(int), 3);
search_key(arr, sizeof(arr) / sizeof(int), 4);
search_key(arr, sizeof(arr) / sizeof(int), 5);
search_key(arr, sizeof(arr) / sizeof(int), 6);
search_key(arr, sizeof(arr) / sizeof(int), 7);
search_key(arr, sizeof(arr) / sizeof(int), 8);
search_key(arr, sizeof(arr) / sizeof(int), 9);
search_key(arr, sizeof(arr) / sizeof(int), 10);
return 0;
}
调试结果
可以看到,最少查找 1 次,最多查找 3 次
可见比遍历要高效的多
_End
完事儿
本文来自博客园,作者:想想就很离谱,转载请注明原文链接:https://www.cnblogs.com/lvvou/p/15724379.html