演算法(6)桶排序 錯誤

2021-08-13 01:34:35 字數 1019 閱讀 5409

//bucket sort

//現在假設我有一堆蛋,包括麻雀蛋、雞蛋、恐龍蛋,現在我要將這幾種蛋排序下序;

//有點常識就知道,這三種類別的蛋大小是不一樣的,而且每一類蛋的大小也是有區別的,現在我對這三種蛋進行排序,我是這樣排的:

//準備三個桶,把同一類別的蛋放到同乙個桶中,然後對每乙個桶內的蛋進行排序,然後按順序從三個桶中取出相應蛋排序;

//即,從放有麻雀蛋的桶裡取出所有麻雀蛋,因為已經有序,直接取出即可,然後再將雞蛋取出,最後取出恐龍蛋,排序完成;

//桶排序即先將大小相近的蛋(或「同一類蛋」)放入到同乙個桶中,然後對桶內的蛋進行排序,由於每個桶內蛋的數量比較有限,所以排序效率較高

//桶排序是一種時間複雜度為o(n)的排序方法,但並不意味著它有多優秀,上帝開啟一扇門的同時也會關上一扇窗

//桶排序的侷限如下:

//1)桶排序耗用較大的輔助空間,所需要的輔助空間一般與被排序的數列的最大值與最小值有關;

//2)聽到「桶」,很容易聯想到雜湊表,因為雜湊表的衝突解決方法之一開鏈法也相當於乙個個桶,事實上,這兩種桶的原理是基本相同的;

//3)並非所有數列都適合桶排序,桶排序適合分布比較均勻的數列,如1,2,3,6,4,像0,999,558,10000這種就不太適合

//4)桶排序是一種穩定的排序演算法

//5)桶排序需要維護乙個鍊錶,但也有一類簡單的桶排序算例如下,所有不同鍵值是放在不同的桶當中的,所以不用維護鍊錶,當然,下面這種方法也不再穩定

#include#includeusing namespace std;

void bucketsort(vector& vec)

{ int length=vec.size();

vectorbuckets(length,0);//準備一堆桶,容器的下標即待排序陣列的鍵值或鍵值經過轉化後的值

//此時每個桶中都是沒有放蛋的,所以都是0

for(int i=0;ivec(a,a+10);

bucketsort(vec);

for(int i=0;i

**源自

排序結構6 桶排序

從 基於比較的排序結構總結 中我們知道 全依賴 比較 操作的排序演算法時間複雜度的乙個下界o n logn 但確實存在更快的演算法。這些演算法並不是不用 比較 操作,也不是想辦法將比較操作的次數減少到 logn。而是利用對待排資料的某些限定性假設 來避免絕大多數的 比較 操作。桶排序就是這樣的原理。...

排序演算法 桶排序

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

排序演算法 桶排序

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