基數排序


原理

基數排序是一種非比較的排序算法,它是以桶排序為基礎的。

這樣排序的原因是因為覺得按高位排序,高位影響大,做出的變動更多,而從低位開始排序,低位影響小,做出的變動小。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

//最大位數
int maxbit(vector<int> arr){
    int len=0;
    for(auto x:arr){
        int count=0;
        while(x>0){
            x/=10;
            c++;
        }
        if(len<count) len=count;
    }
    return len;
}

/*基於int型數組的基數排序簡單實現*/
void radixsort(vector<int> &arr){
    const buckets_number=10;
    vector<vector<int> > buckets(10);//10個桶,每個桶是vector<int>
    int len = maxbit(arr);
    int r=1;
    for(int i=0;i<len;i++){
        for(int x:arr){
            int tmp=x/r;
            int index = tmp%buckets_number;
            buckets[index].push_back(x);
        }
        int i=0;
        for(auto bucket:buckets){
            for(int x:bucket){
                arr[i] = x;
                i++;
            }
            bucket.clear();
        }
        r = r*10;
    }
}

/**************************************************************/
//字符
void radixsort(vector<string> &arr,int stringlen){
    const int buckets_number=256;
    vector<vector<int> > buckets(buckets_number);
    for(int i=stringlen-1;i>=0;i--){
        for(string s:arr){
            buckets[s[i]].push_back(s);
        }
        int idx=0;
        for(auto bucket:buckets){
            for(string s:bucket){
                arr[idx++] = s
            }
            bucket.clear();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM