介紹:
折半查找(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;
}