十大經典排序之桶排序(Python3版本)

2021-10-03 19:03:55 字數 1434 閱讀 1639

首先我們讓我們了解一下什麼是桶排序

(這裡舉例子元素是在列表裡)

桶排序,顧名思義,這個排序和桶有千絲萬縷的關係,那為什麼不叫箱子排序,杯子排序等等呢?

我也不知道(開個玩笑》~<)

桶排序是計數排序的公升級版。它利用了函式的對映關係,按照我的理解就是把乙個個元素通過不斷的入桶,出桶從而達到對元素的排序的效果。

時間複雜度,在理想情況下的話是o(n),但是最壞的情況可能是o(mn),這個在下面的講解裡會提到。

空間複雜度,o(n)

廢話不多說,先上**

def

bucket_sort

(lst,base)

: buckets=[[

]for i in

range

(base)

]#建立桶列表

max=

0for i in

range(1

,len

(lst)):

#找出最大的元素

if lst[i]

>lst[

max]

:max

=i max

=lst[

max]

m=1while m<=

max:

#這個條件很重要,是控制入桶,出桶的次數

for i in

range

(len

(lst)):

buckets[lst[i]

//m%base]

)#按照大小入桶

index=

0for i in

range

(base)

:#出桶

while

len(buckets[i]):

lst[index]

=buckets[i]

.pop(0)

index+=

1 m*=base#例如base=10,m=1*10

while

len(buckets)

: buckets.pop(

)del buckets

我大概解釋一下原理:

首先根據數字的進製(假設是10進製)建立對應的桶列表,列表裡面有10個桶從0~9對應下標排列,然後讀取元素列表,首先找出裡面最大的元素,然後根據最大元素的位數判斷入桶,出桶的次數。

ps:這裡解釋一下為什麼最壞的情況是o(mn),如果最大元素是1000000的話,那麼就要進行1000000次入桶,出桶的操作,這樣會非常麻煩,所以桶排序通常用於對於年齡的排序。

每次迴圈依次根據個位,十位,百位,千位。。。(假設是100就是迴圈3次,到百位停止)對元素進行入桶操作(對應的11入下標為1的桶)。

最後釋放桶列表,輸出排序後的元素列表。

後續的九大經典排序我會持續更新的

十大經典排序

每一次比較完就要立即交換 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。比較完所有...

十大經典排序演算法 桶排序演算法詳解

十大經典排序演算法1.概念 桶排序 bucket sort 是計數排序演算法的公升級版,將資料分到有限數量的桶子裡,然後每個桶再分別排序 2.演算法原理 這是乙個無序數列 11 38 8 34 27 19 26 13,我們要將它按從小到大排序 先建立5個桶,桶的區間跨度 最大值 最小值 桶的數量,注...

十大經典排序之氣泡排序

氣泡排序 氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序 如從大到小 首字母從a到z 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名...