原理
基數排序是一種非比較的排序算法,它是以桶排序為基礎的。
這樣排序的原因是因為覺得按高位排序,高位影響大,做出的變動更多,而從低位開始排序,低位影響小,做出的變動小。
#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(); } } }