二分查詢(迭代和遞迴)
阿新 • • 發佈:2019-02-06
二分查詢大一的時候寫過,現在有些忘了,再寫一遍備用。
迭代版本
#include<iostream>
#include<algorithm>
using namespace std;
int binsearch(int a[],int n,int key){
int l=0,r=n-1;
while(l<=r){
int m=(l+r)/2;
if(a[m]==key)
return m;
else if(a[m]>key)
r=m-1;
else
l=m+1;
}
return -1;
}
int main(){
int a[5]={5,3,8,7,4};
sort(a,a+5);
cout<<binsearch(a,5,3);
return 0;
}
遞迴版本
#include<iostream>
#include<algorithm>
using namespace std;
int bs(int s[],int l,int h,int key){
int m;
if(l>h)
return -1;
else{
m=(l+h)/2;
if(key==s[m])
return m;
else if(key<s[m])
return bs(s,l,m-1,key);
else
return bs(s,m+1,h,key);
}
}
int main(){
int s[5]={1,7,5,3,8};
sort(s,s+5);
int l=0;
int n=5;
int h=n-1;
cout <<bs(s,l,h,8);
return 0;
}