桶排序的基本思想:
將乙個資料表分割成許多buckets,然後每個bucket各自排序,或者用不同的排序演算法,遞迴的…使用bucket sort 演算法,也是一種典型的divide-and-conquer分而治之的策略,它是一種分布式的排序,介於msd基數排序和lsd基數排序之間
def bucketsort(nums):
max_num = max(nums)
# 建立乙個元素全是0的列表,當作桶
bucket = [0]*(max_num + 1)
for i in nums:
bucket[i] += 1
sort_nums =
# 取出桶中的元素
for j in range(len(bucket)):
if bucket[j] != 0:
for e in range(bucket[j]):
return sort_nums
nums = [5, 6, 4, 3, 2, 20, 1, 0, 9, 0]
print bucketsort(nums)
優點:
桶排序是比較穩定的。
桶排序是常見排序中最快的一種,大多數情況下比快排還要快一些。
缺點:
雖然桶排序非常快,但是也非常消耗空間,基本上是最耗空間的一種排序演算法
排序演算法的穩定性:如果在物件序列中有兩個物件r[i] 和 r[j],它們的排序碼 k[i] == k[j] 。如果排序前後,物件r[i] 和 r[j]的相對位置不變,則排序演算法是穩定的,否則就是不穩定的
時間開銷:
排序的時間開銷可用演算法執行中的資料比較次數與資料移動次數來衡量。
演算法執行時間代價大略估算一般都按平均情況進行估算,對於那些受物件排序碼序列初始排列及物件個數影響較大的,則按最好情況和最壞情況進行估算
空間開銷:
演算法執行所需的附加儲存
最簡單的桶排序
問你乙個問題 現在有3 6 1 5 3 7 六個數字,你怎麼把它們從小到大排序呢?你肯定是找到最小的1拿出來,接著是3,一直到7對吧!1。準備桶 你得確定你排序的數字在哪個區域,比如說你要排序的數字中最大的是100 那你就得準備乙個a 101 的陣列,這裡就有102個桶了 2。排序 你要對3 6 1...
最快最簡單的排序 「桶排序」
先來看乙個問題 有一列 0 10 隨機數 5 3 5 2 8 現在要求將它們按照從先到大的順序或從大到小的順序排列,如何去做?在這裡可以需借助乙個一維陣列就可以解決這個問題,首先申請乙個大小為11 的陣列int a 11 編 號從a 0 a 10 剛開始的時候,將a 0 a 10 都初始化為0,然後...
最快最簡單的排序 桶排序
我們學過很多的排序方法,氣泡排序 希爾排序 快速排序 今天我想說的是一種應用起來最快最簡單的排序 桶排序。當你隨機輸入幾個數,進行從小到大 從大到小 依次排序 你會有什麼方法?這裡只需乙個一維陣列即可。申請乙個長度為n的一維陣列。就相當於定義n個變數arr 0 arr n 1 剛開始都初始化為0,表...