排序问题
题目描述
输入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
来源
C语言实验6-一维数组的应用
C++实现
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[11][2];
int i,j,temp;
for(i=1;i<11;i++){
cin>>a[i][0];
a[i][1]=i;
}
for(i=1;i<11;i++) {
for(j=i+1;j<11;j++){
if(a[i][0]>a[j][0]){
temp=a[i][0]; a[i][0]=a[j][0],a[j][0]=temp;
temp=a[i][1]; a[i][1]=a[j][1],a[j][1]=temp;
}
}
}
for(j=0;j<2;j++) {
for(i=1;i<10;i++) {
cout<<a[i][j]<<" ";
}
cout<<a[10][j]<<endl;
}
return 0;
}
或用结构体实现
#include <iostream>
#include <algorithm>
using namespace std;
struct Nums{
int num;
int index;
}nums[10];
bool cmp(Nums a, Nums b){
return a.num<b.num;
}
decltype(0) main()
{
int j=1;
for(int i=0;i<10;i++){
cin>>nums[i].num;
nums[i].index=j++;
}
sort(nums,nums+10,cmp);
for(int i=0;i<9;i++){
cout<<nums[i].num<<" ";
}
cout<<nums[9].num<<endl;
for(int i=0;i<9;i++){
cout<<nums[i].index<<" ";
}
cout<<nums[9].index<<endl;
return 0;
}