初莫M 发表于 2023-10-30 14:34:21

错在哪里了啊(排序问题

题目描述
输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。

输入描述
输入数据有一行,包含10个整数,用空格分开。

输出描述
输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,i,j,t;
    for(i=0;i<10;i++)
    {cin>>a;b=i+1;}
    for(i=0;i<9-1;i++)
    {
      for(j=0;j<9-1-i;j++)
      {
            if(a>a)
            {
                t=a;a=a;a=t;
                t=b;b=b;b=t;
            }
      }
    }
    for(i=0;i<10;i++)
      cout<<a<<' ';
    cout<<endl;
    for(i=0;i<10;i++)
      cout<<b<<' ';
}

isdkz 发表于 2023-10-30 14:34:31

问题在于排序的循环条件和循环次数不正确。在代码中,排序的循环条件是 i<9-1 ,但实际上应该是 i<10-1 ,因为数组有10个元素。此外,排序的循环次数也不正确,应为 9-i 而不是 9-1-i 。

正确的代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,i,j,t;
    for(i=0;i<10;i++)
    {
      cin>>a[ i];
      b[ i]=i+1;
    }
    for(i=0;i<10-1;i++)
    {
      for(j=0;j<10-1-i;j++)
      {
            if(a>a)
            {
                t=a;
                a=a;
                a=t;
                t=b;
                b=b;
                b=t;
            }
      }
    }
    for(i=0;i<10;i++)
      cout<<a[ i]<<' ';
    cout<<endl;
    for(i=0;i<10;i++)
      cout<<b[ i]<<' ';
}


这样修改后,代码就能正确地对输入的10个整数进行排序,并输出排序后的序列以及每个元素在原来序列中的位置。
页: [1]
查看完整版本: 错在哪里了啊(排序问题