m0_62781763 2021-10-29 08:58 采纳率: 75%
浏览 125
已结题

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

输入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

  • 写回答

3条回答 默认 最新

  • Autumn0923 2021-10-29 21:23
    关注
    
    #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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 修改了问题 10月29日
  • 创建了问题 10月29日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line