标签:
对一个数组a,在区间下标[x,y]寻找p是否存在,存在则返回下标,否则返回-1。
循环和递归实现:(练习用的程序)
1 #include <stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 int binSerrch(int a[],int x,int y,int p);//在非递减数组a的x到y区间寻找p,假如存在则返回p的下标,否则返回-1 6 int binSerrch2(int a[],int x,int y,int p);//递归实现 7 int cmp(const void *a,const void *b) 8 { 9 int x,y; 10 x=*(int *)a; 11 y=*(int *)b; 12 return x-y; 13 } 14 int main(int argc, char *argv[]) 15 { 16 int a[20]; 17 int i; 18 int p,ans1,ans2; 19 20 srand((unsigned)time(0)); 21 22 for(i=0;i<20;i++) 23 a[i]=rand()%50+1; 24 25 qsort(a,20,sizeof(a[0]),cmp); 26 27 for(i=0;i<20;i++) 28 { 29 printf("%d ",a[i]); 30 if((i+1)%10==0) printf("\n"); 31 } 32 printf("\n"); 33 34 for(i=1;i<=10;i++) 35 { 36 p=rand()%50+1; 37 ans1=binSerrch(a,0,19,p); 38 ans2=binSerrch2(a,0,19,p); 39 printf("%d %d %d\n",p,ans1,ans2); 40 } 41 42 return 0; 43 } 44 int binSerrch(int a[],int x,int y,int p)//在数组a的x到y区间寻找p,假如存在则返回p的下标,否则返回-1 45 { 46 int mid; 47 while(x<=y) 48 { 49 mid=(x+y)/2; 50 if(a[mid]==p) 51 return mid; 52 else if(a[mid]>p) 53 y=mid-1; 54 else 55 x=mid+1; 56 } 57 return -1; 58 } 59 int binSerrch2(int a[],int x,int y,int p)//递归实现 60 { 61 int mid; 62 if(x>y) return -1; 63 else 64 { 65 mid=(x+y)/2; 66 if(a[mid]==p) return mid; 67 else if(a[mid]>p) return binSerrch2(a,x,mid-1,p); 68 else return binSerrch2(a,mid+1,y,p); 69 } 70 }
标签:
原文地址:http://www.cnblogs.com/huashanqingzhu/p/4476918.html