任务描述:在主函数中定义一个长度为n的整型数组并给每一个数组元素赋值,自定义一个排序函数sort实现对该数组从小到大排序(sort函数要求用折半法实现)。再编写一个用递归实现的折半查找函数int zb_search(int left,int right,int n),查找指定的整数m(需要程序运行时给m赋值)是否在该数组中,若在则返回m在数组中的下标值(若有多个,则返回对应的多个下标,用空格隔开),若不在则返回-1。主函数中实现对zb_search函数的调用以及最后结果的输出。
参考:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main ()
{
int a[100],i;
int max=0,min=200;
int j,k,t;
int x,top,bot,mid;
srand((unsigned)time(NULL));
printf("(一)");
for(i=0;i<100;i++){
a[i]=rand()%200+1;
if(i%10==0) printf("\n");
printf("%-5d\t",a[i]);
}
printf("\n\n");
for(i=0;i<100;i++)
{
if(max<a[i])
max=a[i];
if(min>a[i])
min=a[i];
}
printf("(二)");
printf("max=%d\n min=%d",max,min);
printf("\n\n");
for(i=0;i<99;i++){
k=i;
for(j=i+1;j<100;j++)
if(a[j]<a[k])k=j;
t=a[k];
a[k]=a[i];
a[i]=t;
}
printf("(三)");
printf("选择排序法运算结果;\n");
for(i=0;i<100;i++)
printf("%-4d ",a[i]);
printf("\n\n");
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("(四)");
printf("冒泡排序法运算结果;\n");
for(i=0;i<100;i++)
printf("%-5d",a[i]);
printf("\n\n");
scanf("%d",&x);
top=0;
bot=99;
k=0;
while(top<=bot){
mid=(top+bot)/2;
if(x==a[mid]){
printf("找到的; %d,它就是[%d]\n",x,mid);
k++;
top = mid;
bot = mid;
while(top>=0 && a[--top]==x){
printf("找到的; %d,它就是[%d]\n",x,top);
k++;
}
while(bot<=99 && a[++bot]==x){
printf("找到的; %d,它就是[%d]\n",x,bot);
k++;
}
break;
}else if(x<a[mid])
bot=mid-1;
else
top=mid+1;
}
printf("(五)");
if(k==0)
printf("%d没有找到。\n",x);
return 0;
}