C语言数据结构之二分法查找详解
问题:在有序数组中查找给定元素的下标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; }
到此这篇关于C语言数据结构之二分法查找详解的文章就介绍到这了,更多相关C语言 二分法查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mingw64编译wxWidgets 3.0.2常见错误分析
这篇文章主要介绍了Mingw64编译wxWidgets 3.0.2常见错误分析,需要的朋友可以参考下2016-11-11C++下如何将TensorFlow模型封装成DLL供C#调用
这篇文章主要介绍了C++下如何将TensorFlow模型封装成DLL供C#调用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11VisualStudio2019配置OpenCV4.5.0的方法示例
这篇文章主要介绍了VisualStudio2019配置OpenCV4.5.0的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03
最新评论