"""
基數排序:
基數排序是一種很特別的排序方法,它不是基於比較進行排序的演算法,而是多關鍵字排序思想。借助『分配』和『收集』兩種操作,
對單邏輯關鍵字進行排序。基數排序又分為最高位優先(msd)排序和最低位優先(lsd)排序。
msd:先從高位開始進行排序,對每個關鍵字,可採用計數排序
lsd:先從低位開始進行排序,對每個關鍵字,可採用桶排序
基本思路(以最低位優先排序為例):
1、待排序列表nums = [243, 75, 8]。取得集合的最大值:max_value = max(nums)
2、從最低位開始,依次進行個位、十位、百位、...排序。
以處理個位為例:採用雜湊函式思想,將nums列表中的元素對映到10個列表桶buckets中。
而元素存放的順序是按個位上的數字由小到大排序。
3、這樣從最低位排序一直到最高位排序完成以後, 數列就變成乙個有序序列。
設待排序的陣列r[1..n],陣列中最大的數是d位數,基數為r=10
時間複雜度:o(d*(n+r))
空間複雜度:o(r*n)
"""def radix_sort(nums):
# radix 基數
radix = 10
placement = 1
max_value = max(nums)
while placement < max_value:
# 採用雜湊函式思想,將nums列表中的元素對映到10個列表桶中。
buckets = [list() for _ in range(radix)]
for i in nums:
tmp = int((i / placement) % radix)
# 將讀取buckets中的值,依次更新nums
a = 0
for b in range(radix):
buck = buckets[b]
for i in buck:
nums[a] = i
a += 1
# placement數字權,更新placement到十位、百位、...
placement *= radix
return nums
if __name__ == '__main__':
nums = [234, 75, 8]
print(radix_sort(nums))
基數排序演算法
include stdafx.h include iostream include math.h using namespace std struct radixsort 建立迴圈鍊錶 radixsort creatlink else le ls ls new radixsort 為下乙個節點在堆記...
基數排序演算法
以下內容為程式 int quicksort int p,int n extern int insertsort int p,int n static int partition int p,int n,int m static int quick sort int p,int n 快速排序演算法在 ...
基數排序演算法
經典排序演算法 基數排序radix sort 原理類似桶排序,這裡總是需要10個桶,多次使用 首先以個位數的值進行裝桶,即個位數為1則放入1號桶,為9則放入9號桶,暫時忽視十位數 例如 待排序陣列 62,14,59,88,16 簡單點五個數字 分配10個桶,桶編號為0 9,以個位數數字為桶編號依次入...