标签:题型 right 下标 -- mid 二分法 int 查找 left
问题:在有序数组中查找给定元素的下标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
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。