c语言,利用二分查找法实现一维数组的查找

2025-02-23 16:00:30
推荐回答(1个)
回答1:

#include
#include
#include
void xuanzhe(int a[], int n)
{
int i, j, min, t;

for (i=0; i {
min = i; /*假设当前下标为i的数最小,比较后再调整*/
for (j=i+1; j {
if (a[j] < a[min])
{
min = j; /*如果后面的数比前面的小,则记下它的下标*/
}
}

if (min != i) /*如果min在循环中改变了,就需要交换数据*/
{
t = a[i];
a[i] = a[min];
a[min] = t;
}
}
}
int main(){
int i,n,x;
int mid,left=0,right=999;
int find1=0,find2=0;
double y;
int a[1000];
for(i=0;i<1000;++i){
a[i]=rand();
}
xuanzhe(a,1000);
scanf("%d",&x);
printf("顺序查找:\n");
for(i=0;i<1000;++i){
while(x==a[i]){
printf("找到X=%d,a[%d]\n",x,i);
find1=1;
break;
}
}
if(find1==0){
printf("没有你要找的数\n");
}

printf("%fs\n",clock()/CLOCKS_PER_SEC);
y=clock();
printf("二分查找:\n");
while(!find2&&left{
mid=(left+right)/2;
if(x==a[mid])
find2=1;
else if(xright=mid-1;
else left=mid+1;
}
if(find2==1)
printf("找到x=%d ,a[%d]\n",x,mid);
else
printf("没有你要找的数\n");
printf("%fs\n",(clock()-y)/CLOCKS_PER_SEC);
}