计数鸡排求调
查看原帖
计数鸡排求调
478861
Gumbo楼主2022/9/25 16:25

RT,记录

代码:

#include<bits/stdc++.h>
using namespace std;
template<typename T>
vector<T> radixsort(vector<T> nums){
#define radix 8
    vector<T> cnt(1<<radix,0);
    vector<T> u1(nums.size(),0);
    vector<T> u2(nums.size(),0);
    T basic=1<<radix,lbasic=-radix;
    u2=nums;
    int sz=nums.size();
    while(1){
        lbasic+=radix;
        cnt=vector<T>(1<<radix,0);
        for(auto i:u2)
            ++cnt[(i>>lbasic)&(basic-1)];
        for(auto i:cnt)
            if(i==sz)return u2;
        for(auto i=(cnt.size()-cnt.size()+1);i<cnt.size();++i)cnt[i]+=cnt[i-1];
        for(auto i=cnt.size()-1;i>=1;--i)cnt[i]=cnt[i-1];
        for(auto i:u2)
            u1[cnt[(i>>lbasic)&(basic-1)]++]=i;
        u2=u1;
    }
#undef radix
}
int main(){
    int n;
    scanf("%d",&n);
    vector<int>v(n);
    for(int i=0;i<n;++i)scanf("%d",&v[i]);
    v=radixsort(v);
    for(auto i:v)printf("%d ",i);
    return 0;
}

不明白为什么会变成这样。

2022/9/25 16:25
加载中...