折半查找的非遞歸算法和遞歸算法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循環來轉換的。

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