def
count_sort
(arr,maxvalue)
: bucketlen = maxvalue +
1 bucket =[0
]*bucketlen #建立統計陣列
:# 選擇乙個最大的數
max_arr =
max(arr)
# 建立乙個元素全是0的列表, 當做桶
bucket =[0
]*(max_arr+1)
# 把所有元素放入桶中, 即把對應元素個數加一
for i in arr:
bucket[i]+=1
# 儲存排序好的元素
sort_arr =
# 取出桶中的元素
for j in
range
(len
(bucket)):
if bucket[j]!=0
:for y in
range
(bucket[j]):
return sort_arr
arr =[54
,26,93
,17,77
,31,44
,55,20
]arr = bucketsort(arr)
print
(arr)
[17, 20, 26, 31, 44, 54, 55, 77, 93]
def
radixsort
(a):
i =0#初始為個位排序
n =1#最小的位數置為1(包含0)
max_num =
max(a)
#得到帶排序陣列中最大數
while max_num >
10**n:
#得到最大數是幾位數
n +=
1while i < n:
bucket =
#用字典構建桶
for x in
range(10
):bucket.setdefault(x,
)#將每個桶置空
for x in a:
#對每一位進行排序
radix =
int(
(x /(10
**i))%
10)#得到每位的基數
bucket[radix]
#將對應的陣列元素加入到相應位基數的桶中
j =0for k in
range(10
):iflen
(bucket[k])!=
0:#若桶不為空
for y in bucket[k]
:#將該桶中每個元素
a[j]
= y #放回到陣列中
j +=
1 i +=
1
arr =[54
,26,93
,17,77
,31,44
,55,20
]radixsort(arr)
arr
[17, 20, 26, 31, 44, 54, 55, 77, 93]
十大經典排序演算法 桶排序演算法詳解
十大經典排序演算法1.概念 桶排序 bucket sort 是計數排序演算法的公升級版,將資料分到有限數量的桶子裡,然後每個桶再分別排序 2.演算法原理 這是乙個無序數列 11 38 8 34 27 19 26 13,我們要將它按從小到大排序 先建立5個桶,桶的區間跨度 最大值 最小值 桶的數量,注...
演算法篇 十大經典排序演算法之計數排序
計數排序是乙個非基於比較的排序演算法,該演算法於1954年由 harold h.seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為 n k 其中k是整數的範圍 快於任何比較排序演算法。1 當然這是一種犧牲空間換取時間的做法,而且當o k o nlog n 的時候其效率反而不如基...
十大經典排序演算法
載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...