看看这个程序怎么写,好复杂

任务描述:在主函数中定义一个长度为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;
}