折半查找的非递归算法和递归算法C++

  • 非递归
//a[]是数组,n是数组长度,key是查找的关键字
int BinSearch(int a[],int n,int key) {
	int l=0,r=n-1;
	int mid;
	while(l<=r){
		mid=(1+r)/2;
		if(a[mid]==key) return mid;
		else if(a[mid]<key) l=mid+1;
			 else r=mid-1;
	}
	return -1;
}
  • 递归
//函数头和非递归的不一样,是为了递归的时候传参
int mid;
int BinSearchRec(int a[],int key,int l,int r){
	//递归出口1
	if (l>r) return -1;
	//递归出口2
	mid=(l+r)/2;
	if (a[mid]==key) return mid;
	//递归体
	if (a[mid]<key) BinSearchRec(a[],key,mid+1,r);
	else BinSearchRec(a[],key,l,mid-1);
}

非递归和递归是可以通过while循环来转换的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值