折半查找c++

折半查找

算法

  • 折半查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的基本思想是通过将数组分成两半来逐步缩小搜索范围,直到找到目标元素或者搜索范围为空。
  • 折半查找的基本步骤:
  1. 初始化:设定两个指针,一个指向数组的最低位置(low),另一个指向最高位置(high)。
  2. 比较:计算中间位置的索引 mid = (low + high) / 2,并获取该位置的元素。
  3. 判断:
    如果中间元素等于目标值,则查找成功,返回该位置。
    如果中间元素小于目标值,则在数组的右半部分继续查找(low = mid + 1)。
    如果中间元素大于目标值,则在数组的左半部分继续查找(high = mid - 1)。
  4. 重复:重复步骤2和3,直到找到目标值或low大于high(即查找失败)。

代码

#include<iostream>
using namespace std;
//寻找大于x的第一个位置,没有则返回end+1;
//b(egin)、e(nd)为查找的开始、结束位置
int* find_pos(int* b,int* e,int x){
	if(b==e){
		if(*b > x) 
			return b;
		else	
			return b+1;
	}
	int m=(e-b)/2;
	if(*(b+m)>x)
		find_pos(b,b+m,x);
	else
		find_pos(b+m+1,e,x);
}
int main(){
	int a[]={2,3,3,7,10,20,20,28,35};
	int n=sizeof(a)/sizeof(int);
	cout<<find_pos(a,a+n-1,16)-a<<endl;
	cout<<find_pos(a,a+n-1,40)-a<<endl;
	return 0;
}

stl代码

#include<iostream>
#include<algorithm>//binary_search在该算法中 
using namespace std;
int main(){
	int a[]={2,4,5,6,7,9,22,67};
	int N=sizeof(a)/sizeof(int);
	//元素是否存在,返回布尔值 
	cout<<binary_search(a,a+N,5)<<endl; 
	cout<<binary_search(a,a+N,10)<<endl;
	//查找第一个>=的元素位置,返回指针 
	cout<<lower_bound(a,a+N,22)-a<<endl;
	//查找第一个>的元素位置,返回指针 
	cout<<upper_bound(a,a+N,4)-a<<endl;
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值