折半查找法的遞歸與非遞歸寫法——C++

介紹:

折半查找(BinarySearch)也稱二分查找,它是一種效率較高的查找方法。但是,折半查找要求線性表必須採用順序存儲結構, 而且表中元素按關鍵字有序排列

查找過程:

從表的中間記錄開始,如果給定值和中間記錄的關鍵字相等, 則查找成功;如果給定值大於或者小千中間記錄的關鍵字, 則在表中大於或小千中間記錄的那一半中查找,這樣重複操作, 直到查找成功,或者在某一步中查找區間爲空, 則代表查找失敗。折半查找每一次查找比較都使查找範圍縮小一半,與順序查找相比,很顯然會提高查找效率。 爲了標記查找過程中每一次的查找區間,下面分別用low和high來表示當前查找區間的下界和上界,mid爲區間的中間位置。

遞歸與非遞歸寫法:

#include<iostream>
using namespace std;

int a[10]={5,15,24,35,65,78,88,96,101,321};
int key=96;

int Search_binary(int a[],int low,int high,int key){
	//遞歸寫法
	int i=low,j=high,mid=(low+high)/2;
	if(low>high) return -1;
	if(a[mid]==key) return mid;
	if(a[mid]>key) return Search_binary(a,low,mid-1,key);
	if(a[mid]<key) return Search_binary(a,mid+1,high,key);
	return -1;
}

int Binart_search(int a[],int low,int high,int key){
	//非遞歸寫法
	int i=low,j=high,mid;
	while(i<=j){
		mid=(i+j)/2;
		if(key==a[mid]) return mid;
		else if(key<a[mid]) j=mid-1;
		else i=mid+1;
	}
	return -1;
}

int main(){
	cout<<Search_binary(a,0,9,key)<<endl<<Binart_search(a,0,9,key);
	return 0;
}

運行結果:

在這裏插入圖片描述

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