桶排序可用於最大最小值相差較大的資料情況,比如[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 或所謂的 箱排序,是乙個 排序演算法 工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序 有可能再使用別的 排序演算法 或是以遞迴方式繼續使用桶排序進行排序 桶排序是 鴿巢排序 的一種歸納結果。當要被排序的陣列內的數值是均勻分配的時候,桶排序...