问题标题: 酷町堂:3773数组下表排序

0
0
詹涵杰
詹涵杰
中级守护
中级守护

题目描述 Description

给定一个数字序列,请你将该数字序列从小到大排序,然后依次输出每个元素在原序列中的位置。(数据保证不会出现重复的元素)

例如:2 6 3 8 5,从小到大排序应该是2 3 5 6 8,所以他们的下标排序为:1 3 5 2 4。

输入描述 Input Description

第一行,一个整数n
第二行,n个用空格隔开的整数(没有重复的元素)

输出描述 Output Description

一个经过排序后的下标序列

样例输入 Sample Input

 

5
2 6 3 8 5

样例输出 Sample Output

 

1 3 5 2 4

数据范围及提示 Data Size & Hint

1<= n <=10000,每个元素之间互不相等,在整型范围内


0
施巧稚
施巧稚
初级守护
初级守护
 for(int i=1;i<=n;i++)
    {
       cin>>a[i];
       b[i]=i;
    }
    for(int i=1;i<n;i++)
       for(int j=i+1;j<=n;j++)
          if(a[i]>a[j])
          {
            swap(a[i],a[j]);
            swap(b[i],b[j]);
          } 

核心代码

@包涵宇 是对的呀,要找出交换位置后数组的下标。

如:5
      2 6 3 8 5

      1 3 5 2 4

(样例输入输出)

1.先把2 6 3 8 5从小到大排序,就变成了2 3 5 6 8

2.数组中的‘2’原来的位置是1,所以输出1,而‘3’的位置原来是3,所以输出3。(注意这里要从排好序的数组来挨个寻找数字序列中数字原来的下标。)

0
0
0
雷筱沁
雷筱沁
初级守护
初级守护
if(a[i]<a[j])
{
c=a[i];
a[i]=a[j];
a[j]=c;
c=b[i];
b[i]=b[j];
b[j]=c;
}

以上为交换步骤

 

0
0
包涵宇
包涵宇
中级天翼
中级天翼

我感觉下标测试数据不对啊......

我要回答