1. 程式人生 > >二分查詢(迭代和遞迴)

二分查詢(迭代和遞迴)

二分查詢大一的時候寫過,現在有些忘了,再寫一遍備用。

迭代版本

#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; }