二分法,先排序,在查找
#include<iostream>
#include<cstdlib>
using namespace std;
int cmp ( const void *a, const void *b )
{
return *(int *) a - *(int *) b;
}
int findit(int k,int que[],int n)
{
int a=0,b=n-1,mid=0;
if(n<=0)
return -1;
while(a<=b)
{
mid=(a+b)/2;//定义mid作为基准
if(que[mid]==k)
return mid;
else if(que[mid]>k)
b=mid;
else
a=mid+1;
}
return -1;
}
int main()
{
int que[10]={12,13,14,16,18,19,24,34,11,65};
for(int i=0;i<10;i++)
cout<<que[i]<<endl;//排序前
qsort(que,10,sizeof(int),comp);
cout<<endl;
for(int i=0;i<10;i++)
cout<<que[i]<<endl;//排序后
int key;
cin>>key;//关键字
int num=findit(key,que,10);
if(num!=(-1))
cout<<"the number is at "<<num<<endl;
else
cout<<"no found"<<endl;
return 0;
}