二分查找的递归和非递归
# include <stdio.h>
/**
二分查找的递归
*/
int find1(int a[],int start,int end,int e){
int mid=0;
if(start>end){
return -1;
}
mid=(start+end)/2;
if(a[mid]==e){
return mid;
}else if(a[mid]<e){
return find1(a,mid+1,end,e);
}else {
return find1(a,start,mid-1,e);
}
}
/**
二分查找的非递归
while 循环
*/
int find2(int a[],int len,int e){
int mid,start=0;
while(start<len){
mid=(start+len)/2;
if(a[mid]==e){
return mid;
}else if(a[mid]<e){
start=mid+1;
}else{
len=mid-1;
}
}
return -1;
}
/**
date:20180303
auther:xiaohuya
*/
int main(){
int i,len=0,e,res1=0,res2=0;
int a[100];
printf("请输入数组长度:");
scanf("%d",&len);
for(i=0;i<len;i++){
scanf("%d",&a[i]);
}
printf("请输入你要查找的元素:");
scanf("%d",&e);
res1=find1(a,0,len-1,e);
printf("你要查找的元素下标是:%d\n",res1);
res2=find2(a,len-1,e);
printf("你要查找的元素下标是:%d\n",res2);
return 0;
}