折半查找的非递归算法和递归算法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循环来转换的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章