十大經典排序演算法 計數排序 桶排序 基數排序

2021-09-19 10:37:41 字數 2450 閱讀 8532

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 的時候其效率反而不如基...

十大經典排序演算法

載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...