基數排序與之前的其他七種排序方法都不同,它不需要比較關鍵字的大小。
以下用乙個例子來講解基數排序:
假設有乙個陣列: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 第一趟排序 按每個陣列的個位數字歸到相...