经典题型--二分法查找
作者:互联网
问题:在有序数组中查找给定元素的下标goal。
在查找一个数组元素的下标,可以用循环来解决,但是如果一个数足够大,比如说手机的价格,用循环来查找,就相当于叫一个人猜,从0开始,需要猜很久。这时候就出现了二分查找,也叫对半查找。
对半查找顾名思义就是猜一次,下次猜的内容就减少一半
这时候定义一个变量left表示最左边元素的下标,在定义一个right表示最右边元素的下标,而mid就表示中间元素的下标。
当中间值小于目标值,left重新定义。
if (mid < goal)
{
left = mid + 1;
}
当中间值大于目标元素,right重新定义。
else if (mid > goal)
{
right = mid - 1;
}
当中间元素等于目标元素时,打印即可。
else
{
printf("你找到了,下标为:%d", mid);
break;
}
这中查找方式可能会使用多次,这时候来一个while循环就可以重复查找
如果最后数组元素找不到对应的元素,就在while循环外打印出找不到。
if (left > right)
printf("找不到");
最后代码如下:
#include<stdio.h>//在数组中找到某个数,二分查找
int main()
{
int goal = 7;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof arr[0];
int left = 0; int right = sz - 1;
while (left <= right)
{
int mid = (left + right) / 2;
if (mid < goal)
{
left = mid + 1;
}
else if (mid > goal)
{
right = mid - 1;
}
else
{
printf("你找到了,下标为:%d", mid);
break;
}
}
if (left > right)
printf("找不到");
return 0;
}
欢迎收藏,支持是 标签:题型,right,下标,--,mid,二分法,int,查找,left
来源: https://blog.csdn.net/m0_64332179/article/details/122022207