#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int p[200],q[200];
int main()
{
int n,t,sum=0,maxx=0,minn=99999;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&p[i]);
maxx=max(maxx,p[i]);
minn=min(minn,p[i]);
}
int a[maxx-minn+1];
//这句重点记忆!!!!!
for(int i=0;i<=maxx-minn;i++) a[i]=0;//初始化数组
for(int i=0;i<n;i++) a[p[i]-minn]++;//记录每个数字个数
//这句重点记忆!!!!
for(int i=1;i<=maxx-minn;i++) a[i]+=a[i-1]; //现在a数组记录对应原数字的排名
//这里的倒序是要特别仔细琢磨的,比如文中小绿是最后面的,当然就要取这个数字对应的最后一名了
//也就是同分里面排名最低的,因为他先取嘛!他取完后--到下一个取
for(int i=n-1;i>=0;i--)
{
q[a[p[i]-minn]-1]=p[i];
a[p[i]-minn]--;
}
for(int i=0;i<n;i++) printf("%d ",[i]);
}
计数排序
最新推荐文章于 2024-02-19 09:52:43 发布