您的位置:首页 > 其它

二分查找

2017-12-08 21:44 120 查看
#include <iostream>
#include <cstdio>
/*非递归*/
int biSerch(int a[],int left,int right,int flag){
int mid;
while(left<=right){
mid = (left+right)/2;
if(a[mid]==flag){
return mid;
}
else if(a[mid]>flag){   //右端点左移
right = mid-1;
}
else{
left = mid+1;     //左端点右移
}
}
return -1;         			//没找到
}
/*递归算法*/
int biSerch2(int a[],int left,int right,int flag){
if(left<=right){
int mid;
mid = (left+right)/2;                //折半中间点下标
if(a[mid]>flag){
biSerch2(a,left,mid-1,flag);    //往左边找
}
else if(a[mid]<flag){
biSerch2(a,mid+1,right,flag);  //往右边找
}
else{
return mid;
}
}
return -1;
}
int main(int argc, char** argv){
int a[] = {1,3,5,6,7,8,45,56};
int x;
scanf("%d",&x);

if(biSerch (a,0,sizeof(a)/sizeof(a[0])-1,x)!=-1){
printf("找到元素:%d\n",x);
}
else{
printf("查找失败!\n");
}
int y;
scanf("%d",&y);
if(biSerch2(a,0,sizeof(a)/sizeof(a[0])-1,y)!=-1){
printf("找到元素:%d\n",y);
}
else{
printf("查找失败!\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: