八大排序(五) 基數排序

2021-08-19 18:51:55 字數 1078 閱讀 7944

基數排序與之前的其他七種排序方法都不同,它不需要比較關鍵字的大小。

以下用乙個例子來講解基數排序:

假設有乙個陣列:73, 22, 93, 43, 55, 14, 28, 65, 39, 81

1.首先根據個位數的數值,在走訪數值時將它們分配至編號0到9的桶子中,分配結果如下圖:

2.將這些桶子中的數值按順序重新串接起來,成為數列:81, 22, 73, 93, 43, 14, 55, 65, 28, 39

3.接著再按順序進行一次分配,這次是根據十位數來分配,這次的分配結果如下圖:

4.接下來將這些桶子中的數值重新串接起來,成為數列:14, 22, 28, 39, 43, 55, 65, 73, 81, 93。這時候整個數列已經排序完畢;如果排序的物件有三位數以上,則持續進行以上的動作直至最高位數為止。

基數排序的**如下(以下**是基於最低位優先lsd(least significant digit first)實現的,即從最低位開始,另外還有msd方式,從最高位開始分組,在位數較多的情況下,使用msd的效率會更高):

基數排序:

// 基數排序(lsd),引數d為陣列中最大數的位數,123是3位,1234是4位

public

int radixsort(int array, int d)

for (int i = 0; i < 10; i++)

}numinbucket[i] = 0;

}m++;

n *= 10;

}return temparray;

}

基數排序的時間複雜度是o(d(n+radix))。其中,n為待排序資料個數,d為關鍵碼即資料的位數,關鍵碼的取值範圍為radix。則一趟分配時間複雜度為o(n),一趟收集時間複雜度為o(radix),共進行d趟分配和收集。

ref:

基數排序

八大排序 基數排序

基數排序 將整形10進製按每位拆分,然後從低位到高位依次比較各個位。每次比較完進行排序,直到整個陣列有序 主要分為兩個過程 1 分配,先從個位開始,根據位值 0 9 分別放到0 9號桶中 比如53,個位為3,則放入3號桶中 2 收集,再將放置在0 9號桶中的資料按順序放到陣列中 重複 1 2 過程,...

八大排序之基數排序

個人部落格 建議先看排序綜述,傳送門 資料結構與演算法系列之一 八大排序綜述。基數排序 英語 radix sort 是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。由於整數也可以表達字串 比如名字或日期 和特定格式的浮點數,所以基數排序也不是只能使用於整數...

八大排序指基數排序

一 基數排序的思想 基數排序也稱 桶排序 它的基本思想就是 假設一組待排序資料,先對於資料基於個位排序,然後是基於百位排序,基於千位排序,最後使整個序列有序。二 基數排序 給定一組待排序序列 51 26 7 33 27 534 7648 649 67 49 1 第一趟排序 按每個陣列的個位數字歸到相...