基数排序
作者:
崩溃青蛙
,
2024-08-07 20:08:57
,
所有人可见
,
阅读 1
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1000010;
int n;
int q[N],s[N],w[N];//待排序元素数组,桶,辅助数组
void radix_sort(int d,int r)//d--基数(个,十,百...)r--桶(0-9)
{
int radix=1;//个位开始排
for (int i = 1 ; i <= d ; i++)
{
for(int j=0;j<r;j++) s[j]=0;//桶清零;
for(int j=0;j<n;j++)s[q[j]/radix % r]++;//各元素某一位在桶的位置
for(int j=1;j<r;j++)s[j]+=s[j-1];
for (int j = n - 1 ; j >= 0 ; j--) w[--s[q[j] / radix % r]] = q[j];
for (int j = 0 ; j < n ; j++) q[j] = w[j];
radix *= r;
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&q[i]);
radix_sort(10,10);
for(int i=0;i<n;i++)printf("%d ",q[i]);
return 0;
}