幾種排序演算法總結(九) 基數排序

2021-10-11 00:20:30 字數 849 閱讀 6717

基數排序是一種非比較排序演算法,

將整數按位數切割成不同的數字,然後按每個位數分別比較。

先找到列表最大的數,計算出最大的位數,

從個位開始比較排序直到最大的位數。

基數排序 vs 計數排序 vs 桶排序

這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異:

基數排序:根據鍵值的每位數字來分配桶;

計數排序:每個桶只儲存單一鍵值;

桶排序:每個桶儲存一定範圍的數值;

def radixsort(list):

i = 0 # 初始為個位排序

n = 1 # 最小的位數置為1(包含0)

max_num = max(list) # 得到帶排序陣列中最大數

while max_num > 10 ** n: # 得到最大數是幾位數

n += 1

while i < n:

bucket = {} # 用字典構建桶

for x in range(10):

bucket.setdefault(x, ) # 將每個桶置空

for x in list: # 對每一位進行排序

radix = int((x / (10 ** i)) % 10) # 得到每位的基數

j = 0

for k in range(10):

if len(bucket[k]) != 0: # 若桶不為空

for y in bucket[k]: # 將該桶中每個元素

list[j] = y # 放回到陣列中

j += 1

i += 1

return list

參考:

排序演算法九 基數排序

基數排序 radix sort 又叫桶排序 bucket sort 是一種 分配式排序 而非基於直接比較的排序方式,確切說這是一種匹配方式實現的排序。另外,實現這種排序要求所排序的序列按某乙個基數其排序是偏序方式排列,總體而言基數排序是字典序排序的一種實現形式。它的具體實現即對每一種偏序排序都採取關...

swift演算法之排序 (九)基數排序

1 概述 基數排序屬於分配式排序,又稱 桶子法,他是透過鍵值的部分諮詢,將要排序的元素分配至某些桶中,藉以達到排序的作用。基數排序是屬於穩定性的排序 2 演算法原理 基本原理 利用桶來實現,然後按照基數入桶,基數的取值是從數字的低位到高位以此取值 步驟 1 以無序序列數值的個數為基數,將無序序列的值...

排序演算法總結(二)基數排序

前文介紹過計數排序,雖然其時間複雜度為o n 但是其輔助空間需求較大,對於乙個待排序正數陣列a其所需輔助空間為max a 當a中數值較大時輔助空間難以接受。下面介紹一種在計數排序基礎之上改進的排序演算法基數排序,其時間複雜度為o 1 並且只消耗10個輔助空間。基數排序原理 假定a 我們可以按照如下規...