二分查找-以及变体

本文详细介绍了二分查找算法,包括其时间复杂度和适用场景,并提供了四个变体的代码实现:查找第一个等于给定值的元素、查找最后一个等于给定值的元素、查找第一个大于等于给定值的元素以及查找最后一个小于等于给定值的元素。每个变体都考虑了数据重复的情况并优化了查找策略。
摘要由CSDN通过智能技术生成

二分查找时间复杂度为O(logn),只适合在有序数数据中查找,其随机访问的特性决定了其底层的数据结构只能为数组。
最简单(无数据重复)的代码实现如下:
int binsearch(int array[],int len, int value)
{
int begin=0,end=len-1;
int mid=begin+(end-begin)>>1;
while(begin<=end){
if(array[mid]>value){
high=mid-1;
}elseif(array[mid]<value){
low=mid+1;
}else{
return mid;
}
return -1;
}

变体一:查找第一个值等于给定值得元素(有重复数据)
int binsearch_1(int array[],int len, int value)
{
int begin=0,end=len-1;
int mid=begin+(end-begin)>>1;
while(begin<=end){
if(array[mid]>value){
high=mid-1;
}elseif(array[mid]<value){
low=mid+1;
}else{
//相等时还不能确定是不是第一个等于给定值的位置,
//在查到第一个元素或者前一个元素不等于给

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值