数字排序设置(希望简单一点)

输入n+1个整数,每个整数之间以空格进行分割,且前n个整数互不相同(输入采用scanf,a【i】形式)
1 每输出一个数字,随后要输出一个空格用于分割。
2 第一行输出:将输入的前n个整数由小到大进行排序后输出。
3 第二行输出:用折半查找法在输入的前n个数中找出输入的第n+1个数

 ①若能找到,输出该数是第一行排序后的第几个数。

 ②若找不到,输出“无此数”。

4 第三行输出:将输入的前n+1个整数由大到小进行排序后输出。
例如 输入
6 0 3 9 4 12 7
输出
0 3 4 6 9 12
无此数
12 9 7 6 4 3 0


#include<stdio.h>
int main()
{
    int n = 0;
    int a[10] = {0};
    int i = 0;
    int t = 0;
    int num = 0;
    int low=0;//初始状态 low 指针指向第一个数字
    int high = 0;
    int mid;
    scanf("%d",&n);
    high=n-1;//high 指向最后一个数字
    for(int b = 0; b < n; b++)
    {
        scanf("%d",&a[b]);
    }
    scanf("%d",&num);
    for(int b = 0; b < n; b++)
        for(int c = 0; c < n - b - 1; c++)
        {
            if(a[c] > a[c + 1])
            {
                t = a[c];
                a[c] = a[c+1];
                a[c+1] = t;
            }
        }
    for(int b = 0; b < n; b++)
    printf("%d ",a[b]);
    
    while (low<=high) {
        mid=(low+high)/2;
        if (a[mid]==num)//如果 mid 指向的同要查找的相等,返回 mid 所指向的位置
        {
            printf("\n%d",mid+1);
            break;
        }else if(a[mid]>num)//如果mid指向的数据大于num,则更新 high 指针的位置
        {
            high=mid-1;
        }
        //反之,则更新 low 指针的位置
        else{
            low=mid+1;
        }
    }
    return 0;
 } 

先上结果,这个你不会我觉得你可能是这个折半查找不太会实现,这个我帮你写了一下,现在给你再说一下,就是我先用冒泡排序给数组排个序,然后输出,输出之后就折半查找,折半查找就是你把你输入的数据num去跟high和low的中间数去比较,如果中间值大于num那就说明在你数组的前半段,不然就在后半段,比方说在前半段,那你就把high移动到mid的上一个数据就是mid-1的位置,因为你的数据其实已经跟mid比较过了,所以移动到他上一个位置,然后在获取新的mid,就这样一直夹这个数,直到low>high就说明你这个折半折完了,结果如下

img

第二行输出要求没看懂,为什么会输出“1”呢?,nn又是什么意思?

第二行输出的是:第n+1个数在前n个数排序后位于第几个位置,如果有则输出,否则,无此数,样例中第n+1个数0是前n个数排序后的第一个。nn我猜是打错了,应该是n。