基数排序

记得调B (雾


const int B = 16384;
void sort (vector <int>& vec) {
    int n = vec.size();
    vector <int> buf(n, 0);
    int mx = *max_element(vec.begin(), vec.end());
    for (int base = 0 ; (1ll << base) <= mx ; base += 14){
        vector <int> cnt(B, 0);
        for (auto v : vec) cnt[(v >> base) & (B - 1)] ++;
        for (int i = 1 ; i < B ; i ++) cnt[i] = cnt[i - 1] + cnt[i];
        for (int i = n - 1 ; i >= 0 ; i --)
            buf[-- cnt[(vec[i] >> base) & (B - 1)]] = vec[i]; 
        vec = buf;
    } 
}

posted on 2025-09-29 11:22  FurinaHateComma  阅读(4)  评论(0)    收藏  举报

导航