Description
输入一个数组的值,求出各个值从小到大排序后的次序。
Input
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
Output
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
Sample Input
1
68
15
1 70 25 79 59 63 65 6 46 82 28 62 92 96 43
Sample Output
1
1 11 3 12 7 9 10 2 6 13 4 8 14 15 5
思路
利用结构存储三样数据:数值、排序后的次序、数据读入时的次序,然后按数值大小从小到大排序。接着按数据读入时的次序输出每个数值排序后的次序
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
#define MAX 10005
struct node
{
int num;
int turn;
int flag;
}e[MAX];
bool compare(node x,node y)
{
return x.num<y.num;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&e[i].num);
e[i].flag=i;
}
sort(e,e+n,compare);
for(int i=0;i<n;i++)
{
e[i].turn=i+1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(e[j].flag==i)
{
if(i==0)
printf("%d",e[j].turn);
else
printf(" %d",e[j].turn);
break;
}
}
}
printf("\n");
}
return 0;
}