Fighting 演算法 基數排序

2021-09-11 06:36:00 字數 1224 閱讀 4524

"""

基數排序:

基數排序是一種很特別的排序方法,它不是基於比較進行排序的演算法,而是多關鍵字排序思想。借助『分配』和『收集』兩種操作,

對單邏輯關鍵字進行排序。基數排序又分為最高位優先(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,以個位數數字為桶編號依次入...