基數排序 RadixSort

2021-07-04 22:25:48 字數 996 閱讀 4979

基數排序(以整形為例),將整形10進製按每位拆分,然後從低位到高位依次比較各個位。主要分為兩個過程:

(1)分配,先從個位開始,根據位值(0-9)分別放到0~9號桶中(比如53,個位為3,則放入3號桶中)

(2)收集,再將放置在0~9號桶中的資料按順序放到陣列中

重複(1)(2)過程,從個位到最高位(比如32位無符號整形最大數4294967296,最高位10位)

以【521 310 72 373 15 546 385 856 187 147】序列為例,具體細節如下圖所示:

在資料中最高位為3,進行了三次分配、收集過程後,變成有序陣列。

#define radix_10 10    //整形排序

#define keynum_31 10 //關鍵字個數,這裡為整形位數

//獲取num的從右往左的第pos位的值

int getradixnuminpos(int num,int pos)

return (num/base)%10;

}void radixsort(vector

&nums)

//收集

int k=0;

for(int i=0;ifor(int j=1;j<=radixarrays[i][0];j++)

radixarrays[i][0]=0;}}

}

平均時間複雜度:o(dn)(d即表示整形的最高位數)

空間複雜度:o(10n) (10表示0~9,用於儲存臨時的序列)

穩定性:穩定排序

Radix sort 基數排序

有關 gpu並行程式設計 英文 cuda programming a developer s guide to parallel computing with gpus 第六章 中基數排序,其中並行排序的多執行緒排序,由於沒有具體較為詳細的介紹,對於初次接觸多執行緒的人略微困難。本文較為詳細的介紹此...

基數排序 Radix Sort

基數排序是在某種情況下比快速排序還快的排序.當然了,計數排序 counting sort 也有可能比快速排序快.計數排序非常容易理解,時間複雜度是o max a i 如果資料範圍很小的話,計數排序有巨大優勢.而基數排序,則更進一步,對每一位進行計數排序.這樣時間複雜度降為o n log max a ...

基數排序(radix sort)

基數排序的發明可以追溯到1887年赫爾曼何樂禮在打孔卡片製表機上的貢獻。實現原理 將所有待比較的正整數統一為同樣的數字長度,數字較短的數前面補零。然後,從最低位開始進行基數字10的計數排序,一直到最高位計數排序完後,數列就變成了乙個有序數列 利用了計數排序的穩定性 include includeus...