排序演算法 桶排序

2021-10-04 02:48:56 字數 2012 閱讀 9719

桶排序(bucket sort)的原理很簡單,它是將陣列分到有限數量的桶子裡。

假設待排序的陣列data中共有n個整數,並且已知陣列data中資料的範圍[0, max)。在桶排序時,建立容量為max的桶陣列buckets,並將桶陣列元素都初始化為0;將容量為max的桶陣列中的每乙個單元都看作乙個"桶"。在排序時,逐個遍歷陣列data,將陣列data的值,作為"桶陣列buckets"的下標。當data中資料被讀取時,就將桶的值·加1·。

例如,讀取到陣列data[3]=5,則將buckets[5]的值+1。

在將資料放到桶中之後,再通過一定的演算法,將桶中的資料提出出來並轉換成有序陣列。就得到我們想要的結果了。

桶排序(bucket sort)的原理很簡單,它是將陣列分到有限數量的桶子裡。

假設待排序的陣列data中共有n個整數,並且已知陣列data中資料的範圍[0, max)。

在桶排序時,建立容量為max的桶陣列buckets,並將桶陣列元素都初始化為0;

將容量為max的桶陣列中的每乙個單元都看作乙個"桶"。

在排序時,逐個遍歷陣列data,將陣列data的值,作為"桶陣列buckets"的下標。

當data中資料被讀取時,就將桶的值加1。

例如,讀取到陣列data[3]=5,則將buckets[5]的值+1。

引數說明:

data -- 待排序陣列

n -- 陣列data的長度

max -- 陣列data中最大值的範圍

*/#include

#include

void

bucket_sort

(int data,

int n,

int max)

}int

main()

;printf

("排序前的資料為:\n");

for(

int i=

0; i<

10;i++

)printf

("%d "

,data[i]);

printf

("\n\n");

bucket_sort

(data,10,

10);printf

("排序後的結果為:\n");

因為將n個資料平均分配到m個桶裡,每個桶裡面的元素有k=n/m個,所以桶內排序使用快排時間複雜度為o(k*log2k), m個桶時間複雜度為o(m*k*log2k),因為k=n/m,所以整個桶排序時間複雜度為o(nlog2(n/m)),當m接近n時log2(n/m)是乙個非常小的數,所以桶排序時間複雜度為o(n).

常見使用場景:

排序方法

時間複雜度(平均)

時間複雜度(最壞)

時間複雜度(最好)

空間複雜度

穩定性桶排序

o(n)

o(nlog2n)

o(n)

o(m)

穩定

排序演算法 桶排序

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

排序演算法 桶排序

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

排序演算法 桶排序

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