二分法查找(C语言)
#include<stdio.h>
int Bsearch(int a[],int low,int large,int x);
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,0},i,j;
int m,x;
//for(i=0;i<10;i++)
// scanf("%d",&a[i]);
scanf("%d",&x);
m=Bsearch(a,0,9,x);
printf("Index is %d \n",m);
getchar();getchar();
return 0;
}
//以下三个Bsearch函数都可
//a——数组 n——数组中的长度 x——要找的数 返回x的下角标
/*
int Bsearch(int *a,int n,int x){
int low,mid,large;
low=0;
large=n-1;
while(low<=large){
mid=(low+large)/2;
if(x==a[mid])
return mid;
else if(x>mid)
low=mid+1;
else if(x<mid)
large=mid-1;
}
return -1;
}
*/
//二分查找 递归
/*
int Bsearch(int a[],int low,int large,int x){
int mid,*p;
p=a;
mid=(low+large)/2;
if(low>large)
return -1;
if(x==a[mid])
return mid;
if(x<a[mid])
return Bsearch(p,low,mid-1,x);
else
return Bsearch(p,mid+1,large,x);
}
*/
//二分查找 递归+指针
/*
int *Psearch(int x,int *plow,int *plarge){
int *pmid;
pmid=plow+(plarge-plow)/2;
if(plow>plarge)
return NULL;
if(*pmid==x)
return pmid;
if(x<*pmid)
return Psearch(x,plow,pmid-1);
else
return Psearch(x,pmid+1,plarge);
}
*/