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