#include <iostream.h>
#include <stdio.h>
#include <windows.h>
int erfen(int sum[],int x,int n){
int front=0,rear=n-1;
while(n/2+1){ //设置为n/2+1以减小时间复杂度
if(sum[(front+rear)/2]>x){ //如果这个数在前半部分
rear=(front+rear)/2;
n--;
}
else if(sum[(front+rear)/2]<x){//如果这个数在后半部分
front=(front+rear)/2+1;
n--;
}
else if(x==sum[(front+rear)/2]){//如果找到这个数了
return (front+rear)/2+1;
n--;
break;
}
}
if((n/2+1)==0){ //判断是否找到了
printf("not find/n");
exit(0);
return 0;
}
}
void main(){
int sum[9]={10,11,12,13,14,15,16,17,18},res;
int i=0;
cout<<"请输入你要查找的数:"<<endl;
cin>>i;
res=erfen(sum,i,9);
cout<<"第"<<res<<"个"<<endl;
}
运行结果:
请输入你要查找的数:
15
第六个