C++实现二分查找算法
来源:互联网 发布:天谕浅粉色头发数据 编辑:程序博客网 时间:2024/06/07 06:43
想必二分查找很多人都不陌生,或许说很熟悉,但是在实际生活中又有很多人不能正确的写出它的相应代码,因为二分查找的边界条件等很难控制,下面我们来仔细的分析一下二分查找,这只是个人看法,如有异议,欢迎提出。
1、二分查找可以解决的问题:二分查找可以解决预排序数组的查找问题。只要数组中包含T(即要查找的值),那么通过不断的缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组,将数组的中间项与T进行比较,可以排除一般的元素,范围缩小一半。就这样反复比较反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过Log(2)N次比较。
注意:二分查找是针对有序的数组而言的。
2、二分查找的相关代码如下:
#include<iostream>
using namespace std;
int binary_search(int arr[], int n, int key)
{
int left = 0; //数组的首位置,即arr[0]处
int right = n - 1;//数组的最后一个位置,即arr[n-1],数组大小为n
//循环条件一定要注意
while (left <= right)
{
int mid = left + ((right - left) >> 1);//此处的mid的计算一定要放在while循环内部,否则mid无法正确更新;并且此处用移位代替除以2可以提高效率,而且可以防止溢出。
if (arr[mid] > key)//数组中间的位置得数大于要查找的数,那么我们就在中间数的左区间找
{
right = mid - 1;
}
else if (arr[mid] < key)//数组中间的位置得数小于要查找的数,那么我们就在中间数的右区间找
{
left = mid + 1;
}
else
{
return mid;//中间数刚好是要查找的数字。
}
}
//执行流如果走到此处说明没有找到要查找的数字。
return -1;
}
测试用例如下所示:
void Test()
{
int arr[5] = { 1, 3, 5, 9, 10 };
int ret1 = 0,ret2 = 0,ret3 = 0;
ret1 = binary_search(arr, 5, 9);
cout << ret1 << endl;
ret2 = binary_search(arr, 5, 5);
cout << ret2 << endl;
ret3 = binary_search(arr, 5, 2);
cout << ret3 << endl;
}
3、二分查找代码需要注意的地方:
right=n-1-------->while(left <= right)-------->right=mid-1;
right=n-------->while(left < right)-------->right=mid;
此外:大部分人喜欢在最开始就判断arr[mid]与key相等,但是这样是不明智的,因为相等情况在大多状况下都是少数,写在开始的话,每次循环都需要判断一次相等,浪费时间,效率太低。
阅读全文
0 0
- 二分查找算法的C/C++实现
- C语言实现二分查找算法
- C语言实现二分查找算法
- 二分查找算法的C语言实现
- c语言实现二分查找算法
- 用C语言实现二分查找算法
- C 二分查找算法
- c 二分查找算法
- [C]算法 - 二分查找
- C 二分查找算法
- C 二分查找算法
- C语言实现折半查找(二分查找)的算法
- 二分查找算法实现
- 二分查找算法实现
- 算法:二分查找算法(c++)
- 快速排序和二分查找算法的实现C语言
- 二分查找算法递归和非递归实现(C++)
- c语言实现的通用二分查找算法
- C/C++:各种基本算法实现小结(一)—— 单链表
- Python版单进程、多进程、多线程服务器
- springboot druid 数据库批量更新错误 multi-statement not allow
- CODE[VS]1016 税收与补贴问题
- JavaWeb应用技术概述
- C++实现二分查找算法
- wordpress伪静态化之后去除category分类
- java中输入char类型的数据
- github项目学习--Vue结合Pug模板引擎
- 加深理解指针的四个实验
- clientX, pageX, offsetX, screenX
- gp
- [Leetcode] 398. Random Pick Index 解题报告
- [LeetCode]199. Binary Tree Right Side View