传说中最快的排序,然而不支持负数和浮点数,其实感觉也不是那么实用啦。
#include<bits/stdc++.h>//基数排序
using namespace std;
int n;
int A[100005],B[100005];
int cnt[1<<18];
int P=(1<<16)-1;
int main() {
cin>>n;
for(int i=1; i<=n; i++)scanf("%d",&A[i]);
for(int i=1; i<=n; i++)cnt[A[i]&P]++;
for(int i=1; i<=P; i++)cnt[i]+=cnt[i-1];
for(int i=n; i>=1; i--)B[cnt[A[i]&P]--]=A[i];
for(int i=0; i<=P; i++)cnt[i]=0;
for(int i=1; i<=n; i++)cnt[(B[i]>>16)&P]++;
for(int i=1; i<=P; i++)cnt[i]+=cnt[i-1];
for(int i=n; i>=1; i--)A[cnt[(B[i]>>16)&P]--]=B[i];
for(int i=1; i<=n; i++)printf("%d ",A[i]);
return 0;
}