二分查找也称折半查找,当我们需要在一组有序的数据中,最快地查找目标值的时候,二分查找是一个不错的方法。
为什么要用二分查找呢?二分查找的查找速度,是指数形形势增长的,每次都可以减少一半的查找量,这是一种效率很高的查找方法。
先看代码吧
//二分查找
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
printf("请输入您想查找的值:");
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了!下标为%d", mid);
break;
}
}
if (left > right)
{
printf("查找失败\n");
}
return 0;
}
例如在1 2 3 4 5 6 7 8 9 10中查找 7
刚开始是这样的:
第一次查找,k=7>arr[mid]=5,这时候,就让arr[5]当作新的left
接着:
第二次查找,k=7 < arr[mid]=8,就让arr[6]当新的right
接着:
第三次查找,这时候k=7>arr[mid]=6,就让arr[6]当新的left
接着:
这时候找到要查找的 7 ,返回数组下标6
运行程序验证结果:
结果正确。
要注意!必须是在有序数列中进行查找。