排序 桶排序(Bucket sort)

2021-10-02 15:00:46 字數 2242 閱讀 5743

桶排序是將待排序集合中處於同乙個值域的元素存入同乙個桶中,也就是根據元素值特性將集合拆分為多個區域,則拆分後形成的多個桶,從值域上看是處於有序狀態的。對每個桶中元素進行排序,則所有桶中元素構成的集合是已排序的。

桶排序的思想近乎徹底的分治思想。演算法的過程描述如下:

根據待排序集合中最大元素和最小元素的差值範圍和對映規則,確定申請的桶個數;

遍歷待排序集合,將每乙個元素移動到對應的桶中;

對每乙個桶中元素進行排序,並移動到已排序集合中。

桶排序過程中存在兩個關鍵環節:

下面我們用乙個例項來說明。待排序集合為:[-7, 51, 3, 121, -3, 32, 21, 43, 4, 25, 56, 77, 16, 22, 87, 56, -10, 68, 99, 70],對映規則為:

遍歷集合可得,最大值為:

遍歷待排序集合,依次新增各元素到對應的桶中。

桶下標桶中元素

0-7, -3, -10

13, 4216

321, 25, 22432

543651, 56, 56768

877, 70987

1099

1112

13121

對每乙個桶中元素進行排序,並移動回原始集合中,即完成排序過程。

感謝五分鐘學演算法製作的gif。

k 表示桶的個數。

平均時間複雜度:o(n+k)

最佳時間複雜度:o(n+k)

最差時間複雜度:

o(n+k)。k 表示桶的個數。

演算法的穩定性取決於對桶中元素排序時選擇的排序演算法。

const int offset = 105; // 為桶的邊界

template void bucketsort(t arr, int n) }}

public static void bucketsort(int arr)

// 計算桶的數量

int bucketnum = (max - min) / arr.length + 1;

arraylist> bucketarr = new arraylist<>(bucketnum);

for(int i = 0; i < bucketnum; i++)

// 將每個元素放入桶

for(int i = 0; i < arr.length; i++)

// 對每個桶進行排序

for(int i = 0; i < bucketarr.size(); i++)

// 將桶中的元素賦值到原序列

int index = 0;

for(int i = 0; i < bucketarr.size(); i++)

} }

def __init__(self, datas, size=100):

self.datas = datas

self.bucketsize = size

self.result = [0 for i in range(len(datas))]

self.bucket = [0 for i in range(self.bucketsize)]

def _sort(self):

# 讀入各個元素,並在對應的位置統計,當bucket裡的元素不為0

# 就儲存到result裡面

for num in self.datas:

self.bucket[num] += 1

j = 0

for i in range(self.bucketsize):

while(self.bucket[i]):

self.result[j] = i

self.bucket[i] -= 1

j += 1

def show(self):

print "resutl is:",

for i in self.result:

print i,

print ''

經典排序演算法 桶排序Bucket sort

經典排序演算法 桶排序bucket sort 補充說明三點 1,桶排序是穩定的 2,桶排序是常見排序裡最快的一種,比快排還要快 大多數情況下 3,桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序演算法 我自己的理解哈,可能與網上說的有一些出入,大體都是同樣的原理 無序陣列有個要求,就是...

經典排序演算法 桶排序Bucket sort

經典排序演算法 桶排序bucket sort 補充說明三點 1,桶排序是穩定的 2,桶排序是常見排序裡最快的一種,比快排還要快 大多數情況下 3,桶排序非常快,但是同時也非常耗空間,基本上是最耗空間的一種排序演算法 我自己的理解哈,可能與網上說的有一些出入,大體都是同樣的原理 無序陣列有個要求,就是...

排序演算法 9 桶排序(Bucket Sort)

桶排序是計數排序的公升級版。它利用了函式的對映關係,高效與否的關鍵就在於這個對映函式的確定。桶排序 bucket sort 的工作的原理 假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排 9.1 演算法描述 9.2 演...