天天看点

二分查找(递归、循环)

今天同事在讨论下午来面试的那个人,然后说下次面试应该多加个算法题,二分递归排序,还特别强调了递归,然后我说二分不是本来就是递归的么。。。然后他说你被秒了。。

额,我太水了。。丢人的。。。

方法1:递归

二分查找(递归、循环)

#include <iostream.h>

#define SIZE 10

int data[SIZE] = {10,20,30,40,50,60,70,80,90,100};

int two_search(int start, int end, int val);

main()

{

int val; 

int p;

cin>>val;

p=two_search(0, SIZE-1, val);

if (p != -1)

   cout<<"Search"<<data[p]<<"is"<<p+1 <<" count!";

else

   cout<<"no found!";

return 0;

}

int two_search(int start, int end, int val)

{

int p = (start+end)/2;

if(data[p]!=val)

{ if (start>end) 

     return -1;

if (data[p] > val)     

   two_search(start,p-1,val);

else 

     two_search(p+1,end,val);

}

else return p;

}

方法2:递归

二分查找(递归、循环)

#include<iostream>

#define S 10

using namespace std;

int binarysearch(int a[],int left,int right,int numtofind)

{

if(a[(left+right)/2]!=numtofind)

{

   if(left > right) return -1;

   if(a[(left+right)/2]>numtofind) binarysearch(a,left,(right+left)/2-1,numtofind);

   else binarysearch(a,(left+right)/2+1,right,numtofind);

}

else return (left+right)/2;

}

int main()

{

int a[S]={0,1,3,5,6,9,10,12,16,19};

int n;

int pos;

cin>>n;

pos=binarysearch(a,0,S-1,n);

cout<<"the num is on pos:"<<pos<<endl;

}

方法3:循环

二分查找(递归、循环)

#include<iostream>

using namespace std;

int binary_search(int a[],int beg,int end,int num)

{

if (beg>end) return -1;

if (num==a[(beg+end)/2]) return (beg+end)/2;

else return num>a[(beg+end)/2]?binary_search(a,(beg+end)/2+1,end,num):binary_search(a,beg,(beg+end)/2-1,num);

}

int main()

{

int a[10]={1,2,3,4,5,7,8,9,10,11};

cout<<binary_search(a,0,9,6);

}

方法四:循环

#include<iostream>

#include<algorithm>

using namespace std;

int binarysearch(int a[],int left,int right,const int &value)

{

while(left<=right)

{

   int middle=(left+right)/2;

   if(a[middle]==value) return middle;

   else if(value>a[middle]) left=middle+1;

   else right=middle-1;

}

return -1;

}

int main()

{

int a[10]={3,2,1,4,5,6,8,9,7,0};

sort(a,a+10);

int n;

cin>>n;

if(binarysearch(a,0,9,n)==-1)

   cout<<"no"<<endl;

else

   cout<<"yes"<<endl;

}

转载于:https://my.oschina.net/u/211101/blog/39802

继续阅读