二分查找的简单实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 20
#define N_RAND 200
int cmp( const void *a , const void *b ){
return *(int *)a > *(int *)b ? 1 : -1;
}
//返回在数组中位置
int B_Search(int *a, int p, int q, int key){
while(p<=q){
int r=(p+q)/2;
if(a[r]==key) return r;
else if(a[r] > key) q=r-1;
else p=r+1;
}
return -1;
}
int main(){
int i, a[N];
srand((unsigned)time(NULL));
for(i=0;i<N;i++){
a[i]=rand()%N_RAND;
printf("%d ",a[i]);
}
printf("\n");
qsort(a,N,sizeof(int),cmp);
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
printf("\n");
for(i=0;i<N;i++){
printf("元素位置为%d \n",B_Search(a,0,N-1,a[i]));
}
system("pause");
return 0;
}
相关链接:
http://baike.baidu.com/view/610605.htm
http://www.cnblogs.com/xiaosuo/archive/2010/04/07/1687231.html