折半查找(递归实现)
#include<iostream>
using namespace std;
const int list_size=10;
int binsearch(int list[],int searchnum,int left,int right);
int compare(int x,int y);
int main()
{
int list[]={1,2,3,5,7,8,9,12,15,18};
cout<<"输入要查找的数: ";
int seanum;
cin>>seanum;
int suc=binsearch(list,seanum,0,list_size);
if(suc==-1)
cout<<"未查到数字"<<endl;
else
cout<<"已查找到数字"<<endl;
return 0;
}
int binsearch(int list[],int searchnum,int left,int right)
{
if(left<=right){
int middle=(left+right)/2;
switch(compare(list[middle],searchnum)){
case 1:
return binsearch(list,searchnum,left,middle-1);
case 0:
return middle;
case -1:
return binsearch(list,searchnum,middle+1,right);
}
}
return -1;
}
int compare(int x,int y)
{
if(x==y)
return 0;
else if(x<y)
return -1;
else
return 1;
}