二分查找中等于的意义
Significance of Equal To in Binary Search
本文关键字:二分查找 更新时间:2023-10-16
我正在c++中实现二进制搜索。下面是我的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int bs(vector<int> a, int val)
{
int l =0, r = a.size()-1;
while(l<=r) // Significance of ==
{
int mid = l + (r-l)/2;
if(a[mid]==val) return mid;
if(a[mid]>val)
{
r = mid-1; continue;
}
else
{
l = mid + 1 ;
}
}
return l; // Deliberately returning this
}
int main()
{
vector<int> a = {1,3};
cout << bs(a,1) <<endl;
return 0;
}
问题1
在一些实现中,我看到人们使用while(l<r)
而有些则使用
while(l<=r)
偏好一种方式之间有概念上的区别吗?如果我不使用== ?
,任何可能的错误来源问题2
如果没有找到元素,是否保证l是该元素可以插入的位置,从而使列表仍然保持排序?
这取决于您如何计算变量r
。
r = a.size()-1;
正确的用法是while(l<=r)
如果你计算r为r = a.size();
,正确的用法是while(l<r)
如果没有找到元素,则保证l为位置可以在其中插入元素,使列表仍然保留排序?
你没有对vector进行排序,为了正确的二叉查找,vector应该在调用二叉查找之前进行排序。
std::sort(std::begin(a),std::end(a));
和header提供了一个std::binary_search
,所以你可以像下面这样使用它:
std::binary_search(std::begin(a),std::end(a),val);
二分查找应该返回向量中索引的值,如果它找到。但是不能保证它会提供下一个插入位置。
当使用equal to时是否有效?
我在回答的第一部分已经解释过了。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 使用二分法查找数的平方根时出现问题
- 编写代码以在 C++ 中使用二分法查找平方根
- c++中的二分查找:升序数组+降序数组
- 递归二分查找函数在c++
- 二分查找比某个值小的元素的位置
- 斐波那契数列,二分查找
- 为什么我的二分查找需要一个额外的比较?log2 (N) + 1
- 给定一个按行排序的整数矩阵结构,如何实现二分查找?
- 二分查找中等于的意义
- 涉及二分查找/二分法