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