桶排序簡述(區別於計數排序)

2021-10-08 08:06:33 字數 1145 閱讀 5492

桶排序可用於最大最小值相差較大的資料情況,比如[9012,19702,39867,68957,83556,102456]。

但桶排序要求資料的分布必須均勻,否則可能導致資料都集中到乙個桶中。比如[104,150,123,132,20000], 這種資料會導致前4個數都集中到同乙個桶中。導致桶排序失效。

對於乙個陣列[21,8,6,11,36,50,27,42,0,12]

1.找出待排序陣列中的最大值max、最小值min

最大值max=50,最小值min=0

2.我們使用 動態陣列arraylist 作為桶,桶裡放的元素也用 arraylist 儲存。桶的數量為(max-min)/arr.length+1

桶的數量=(max-min)/arr.length+1

3.遍歷陣列 arr,計算每個元素 arr[i] 放的桶

存放桶的下標=(arr[i]-min)/arr.lengh

4.每個桶各自排序

桶內排序可以選擇比較排序或者其他排序。

5.遍歷桶陣列,把排序好的元素放進輸出陣列

平均情況下,桶排序的時間複雜度為 o(n)。

最壞情況下,所有資料都放到同乙個桶內,桶排序的時間複雜度為 o(n^2) 或 o(n * lg n),這取決於桶內元素自排序的演算法。

桶排序,基數排序,計數排序的區別

桶排序是在陣列元素在某個小範圍內大量資料情況下時間複雜度為o n 的排序。假如資料的範圍為0 1000我們就開乙個1001大小的陣列進行排序,就是假如100出現了就將100的桶b 100 以十進位制為例,基數指的是數的位,如個位,十位,百位等 基數排序就是多個桶進行桶排序,比如輸入的數最多有兩位,我...

陣列計數排序,類似於桶排序小問題

題目描述 公司現在要對所有員工的年齡進行排序,因為公司員工的人數非常多,所以要求排序演算法的效率要非常高,你能寫出這樣的程式嗎?輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表公司內員工的人數。輸入的第二行包括n個整數 代表公司內每個員工的年齡...

桶排序和計數排序

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