题目描述
输入n个不同的整数,从小到大排序后,分别给一个编号,最后按照输入的顺序,输出每个数排序后的编号。 请用快速排序 sort() 结合 函数 进行排序。
输入
第1行,一个整数n,1=<n<=10000; 第2行,有n个不同的整数,每个数都是int范围的。注意:可能有相同整数
输出
共1行,依次输出每个数的排名。
代码:
#include<bits/stdc++.h>
using namespace std;
struct f{
int k,b,c;
}a[105];
bool cmp(f x,f y){
if(x.k==y.k)return x.c<y.c;
else return x.k>y.k;
}
bool cmp1(f x,f y){
return x.c>y.c;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].k,a[i].c=i;
sort(a+1,a+n+1,cmp);
int cnt=1;
for(int i=1;i<=n;i++){
if(a[i].k==a[i-1].k)a[i].b=cnt;
else{
a[i].b=cnt;
cnt++;
}
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++)
cout<<a[i].b<<" ";
return 0;
}