JMpro 2024-07-28 14:56 采纳率: 57.1%
浏览 6
已结题

C语言实验题-排序从小到大和对应位置

C语言实现
输入10个大小不同的整数,将它们从小到大排序后输出,并给出现每个元素在原来序列中的位置。
输入
输入数据有一行,包含10个整数,用空格分开。
输出
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
样例输入
1 2 3 5 4 6 8 9 10 7
样例输出
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9
代码:

#include <stdio.h>
int main()
{
    int arr_num[10],arr_index[10]={1,2,3,4,5,6,7,8,9,10},i,j,temp,temp_index;
    for ( i = 0; i < 10; i++)
    {
        scanf("%d",&arr_num[i]);
    }
    for ( i = 0; i < 9; i++)
    {
        for (j = 0; j < 9-i; j++)
        {
            if (arr_num[j]>arr_num[j+1])
            {
                temp = arr_num[j];
                temp_index = arr_index[j];
                arr_num[j] = arr_num[j+1];
                arr_index[j] = arr_index[j+1];
                arr_num[j+1] = temp;
                arr_index[j+1] = temp_index;
            }
        }
        for ( i = 0; i < 10; i++)
        {
            if (i==9)
            {
                printf("%d\n",arr_num[i]);
            }else
            {
                printf("%d ",arr_num[i]);
            }
        }
        for ( i = 0; i < 10; i++)
        {
            if (i==9)
            {
                printf("%d\n",arr_index[i]);
            }else
            {
                printf("%d ",arr_index[i]);
            }
        }
    }
    return 0;
}

使用冒泡排序,我觉得思路正确,但输出结果不对,求指点?非常感谢!!

  • 写回答

2条回答 默认 最新

  • a5156520 2024-07-28 15:14
    关注

    将第23行到第42行放到第43行后面即可,即在冒泡排序完成后再输出排序的结果。

    修改如下:

    #include <stdio.h>
    int main()
    {
        int arr_num[10],arr_index[10]={1,2,3,4,5,6,7,8,9,10},i,j,temp,temp_index;
        for ( i = 0; i < 10; i++)
        {
            scanf("%d",&arr_num[i]);
        }
        
        for ( i = 0; i < 9; i++)
        {
            for (j = 0; j < 9-i; j++)
            {
                if (arr_num[j]>arr_num[j+1])
                {
                    temp = arr_num[j];
                    temp_index = arr_index[j];
                    
                    arr_num[j] = arr_num[j+1];
                    arr_index[j] = arr_index[j+1];
                    
                    arr_num[j+1] = temp;
                    arr_index[j+1] = temp_index;
                }
                
    //            for(int k=0;k<10;k++){
    //                printf("%d:%d ",arr_num[k],arr_index[k]);
    //            } 
    //            printf("\n");
            }
            
           
        }
        
        // 将下面两个for循环放到前面排序的for循环后面即可 
         for ( i = 0; i < 10; i++)
            {
                if (i==9)
                {
                    printf("%d\n",arr_num[i]);
                }else
                {
                    printf("%d ",arr_num[i]);
                }
            }
            
            for ( i = 0; i < 10; i++)
            {
                if (i==9)
                {
                    printf("%d\n",arr_index[i]);
                }else
                {
                    printf("%d ",arr_index[i]);
                }
            }
        return 0;
    }
     
    
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥15 paddle库安装时报错提示需要安装common、dual等库,安装了上面的库以后还是显示报错未安装,要怎么办呀?
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题