演算法 排序 桶排序

2021-10-03 12:43:41 字數 1390 閱讀 4625

桶排序(bucket sort)是計數排序的公升級版。它利用了函式的對映關係,高效與否的關鍵就在於這個對映函式的確定。

工作原理:假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序。

9.1 演算法描述

設定乙個bucketsize,作為每個桶所能放置多少個不同數值

設定乙個定量的陣列當作空桶;

遍歷輸入資料,並且把資料乙個乙個放到對應的桶裡去;

對每個不是空的桶進行排序;

從不是空的桶裡把排好序的資料拼接起來。

注意,如果遞迴使用桶排序為各個桶排序,則當桶數量為1時要手動減小bucketsize增加下一迴圈桶的數量,否則會陷入死迴圈,導致記憶體溢位。

桶排序最好情況下使用線性時間o(n),桶排序的時間複雜度,取決與對各個桶之間資料進行排序的時間複雜度,因為其它部分的時間複雜度都為o(n)。很顯然,桶劃分的越小,各個桶之間的資料越少,排序所用的時間也會越少。但相應的空間消耗就會增大。

排序方式:out-place

時間複雜度:

最佳情況:t(n) = o(n+k)

最差情況:t(n) = o(n2)

平均情況:t(n) = o(n+k)

空間複雜度:o(n+m)

}// 桶數量 c (10)表示間隔 max / 10 - min / 10 + 1

int bucketnum = (int) (largest / 10 - minimum / 10 + 1);

list bucketlist = new list[bucketnum];

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

}// 對桶內元素進行排序,並且回歸到原陣列

for (int i = 0,index = 0; i < bucketlist.length; i++) }}

}

排序演算法 桶排序

桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序使用線性時間 n 但桶排序並不...

排序演算法 桶排序

2009 12 02 12 01 2817人閱讀 桶排序 bucket sort 或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 桶排序是鴿巢排序的一種歸納結果。當要被排序的陣列內的數值是均...

排序演算法 桶排序

桶排序 bucket sort 或所謂的箱排序的原理是將陣列分到有限數量的桶子裡,然後對每個桶子再分別排序 有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序 最後將各個桶中的資料有序的合併起來。排序過程 假設待排序的一組數統一的分布在乙個範圍中,並將這一範圍劃分成幾個子範圍,也就是桶 ...