题目描述
输入一个数组的值,求出各个值从小到大排序后的次序。
输入
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
输出
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
样例输入
1 68 15 1 70 25 79 59 63 65 6 46 82 28 62 92 96 43
样例输出
1 1 11 3 12 7 9 10 2 6 13 4 8 14 15 5
理解:
找两个数组,一个数组存数据,一个数组存下标。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10000;
int a[maxn],b[maxn];//b[]存下标,a[]存排的数据
int main()
{
int n,i,m=0,j;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b,b+n);//从小到大排序
for(i=0;i<n;i++)
{
if(b[i]==b[i+1])
m++;//判断重复的个数
else
b[i+1-m]=b[i+1];//将数组往前题m(重复的个数)个位置
}
for(i=0;i<n;i++)
{
for(j=0;j<n-m;j++)
{//数组a与b进行比较,此时b的长度为n-m
if(a[i]==b[j])
printf("%d",j+1);//输出下标
}
if(i==n-1)//对于空格的输出
printf("\n");
else
printf(" ");
}
}
return 0;
}