//(1) 用"折半查找法"之前,数组一般要由小到大排序
//(2) 题目提到"要求查找3个数据",是指用一个循环实现3个不同输入数的查找?
#include
#include
#include
int chazhao(int k[],int t,int d,int c);
void sort_asc(int k[],int m);
int main()
{
int a,i,j,b=0,c,result;
int k[100],l[100];
int t=30,d=80;
srand(time(NULL));
printf("产生的%d到%d的随机数为: ",t,d);
printf("\n");
for(i=t,j=0;i<=d,j {
a=rand()%(d-t+1)+t;//随机数30到80 //原来的代码,产生30到79的随机数 a=rand()%(d-t)+t;
k[j]=a;
}
for(i=0;i<50;i++)
{
printf("%d ",k[i]);
b++;
if(b==10)
{
printf("\n");
b=0;
}
}
printf("置逆后:");
printf("\n");
for(i=0,j=d-t-1;i<=d-t,j>=0;i++,j--)
l[i]=k[j];
for(i=0;i {
printf("%d ",l[i]);
b++;
if(b==10)
{
printf("\n");
b=0;
}
}
//冒泡法排序(从小到大)
sort_asc(k,50);
printf("你要查找的数:");
scanf("%d",&c);
result=chazhao(k,0,49,c);
printf("%d\n",result);
if(result!=-1)
printf("你要查找的数在此数据中, 为%d",result);
else
printf("无此元素");
getchar();
return 0;
}
int chazhao(int k[],int x,int y,int c)
{
int mid,result,midval,n,low=x,high=y; //int n 没有使用
while(low<=high)
{
mid=(low+high)/2;
midval=k[mid];
if(midval low=mid+1;
else if(midval>c)
high=mid-1;
else
{
result=midval;
break;
}
}
if(low>high)
result=-1;
return result;
}
//冒泡法排序(从小到大)
void sort_asc(int k[],int m)
{
int i,j;
int temp;
for(j=0;j<(m-1);j++)
{
for(i=0;i<(m-j-1);i++)
{
if(k[i]>k[i+1])
{
temp=k[i];
k[i]=k[i+1];
k[i+1]=temp;
}
}
}
}
