基數排序(radix sort)是桶排序的擴充套件,它的基本思想是:將整數按位數切割成不同的數字,然後按每個位數分別比較。
具體做法是:將所有待比較數值統一為同樣的數字長度,數字較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後, 數列就變成乙個有序序列。
通過基數排序對陣列,它的示意圖如下:
在上圖中,首先將所有待比較樹脂統一為統一位數長度,接著從最低位開始,依次進行排序。
按照個位數進行排序。
按照十位數進行排序。
按照百位數進行排序。
排序後,數列就變成了乙個有序序列。
#include using namespace std;
const int radix = 10;
int getdigitalcounts(int data)
return count;
}int getdigitalnuminpos(int data, int pos)
void radixsort(int data, int len)
//ge the max value digital counts
int digitalcounts = getdigitalcounts(max);
int* radixarrays[radix];
for(int i = 0; i < radix; i++)
for(int i = 0; i < digitalcounts; i++)
int index = 0;
//collect value from radix arrays to data
for(int k = 0; k < radix; k++)
radixarrays[k][0] = 0;}}
for(int i = 0; i < radix; i++)
}int main() ;
radixsort(arr, 10);
for(int i = 0; i < 10; i++)
cout << arr[i] << endl;
return 0;
}
什麼是基數排序?
資料結構與演算法 計數排序 在之前的部落格中,我介紹過一種非比較排序 計數排序。計數排序的原理很簡單,就是用乙個陣列來統計每種數字出現的次數,然後按照大小順序將其依次放回原陣列,達成排序的目的。但是計數排序有乙個很嚴重的問題,就是其只能對整數進行排序,一旦遇到字串時,就無能為力了。為了彌補上述的缺點...
動畫 什麼是基數排序?
基數排序和計數排序一樣無需進行比較和交換,和桶排序一樣利用分布和收集兩種基本操作進行排序。基數排序是把每乙個元素拆成多個關鍵字,乙個關鍵字可以在每乙個元素上同等的位置進行計數排序,乙個元素拆成多個關鍵字可以看作是要進行幾輪分桶,以乙個元素最長的長度為準。基數排序可以看成多 單 關鍵字的排序,可以想象...
排序 基數排序
基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...