經典排序演算法 - flash sort
flashsort依然類似桶排,主要改進了對要使用的桶的**,或者說,減少了無用桶的數量從而節省了空間,例如
待排數字[ 6 2 4 1 5 9 100 ]桶排需要100個桶,而flash sort則由於可以**桶則只需要7個桶
即待排陣列長度個桶,如何**將要使用的桶有這麼乙個公式
該排序有前置條件,需要知道待排陣列的區間和待排陣列的長度,
例如已知待排陣列[ 6 2 4 1 5 9 ]的長度為6,最大值9,最小值1,這三個是已知條件,如果無法知道這三個則無法應用該排序
**的思想
如果有這樣乙個待排陣列,其最大值是100,最小值是1,陣列長度為100,那麼50在排完序後極有可能出現在正中間,flash sort就是基於這個思路
**桶號細節
待排陣列[ 6 2 4 1 5 9 ]
具體看6可能出現的桶號
ai - amin 是 6 - 1 = 5
amax - amin 是9 - 1 = 8
m - 1 是陣列長度6 - 1 = 5
則(m - 1) * (ai - amin) / (amax - amin) = 5 * 5 / 8 =25/8 = 3.125
最後加上1等於 4.125
6**的桶號為4.125
2**的桶號為1.625
4**的桶號為2.875
1**的桶號為1
5**的桶號為3.5
9**的桶號為5
去掉小數字後,每個數字都擁有自己**的桶號,對應如下所示
待排陣列[ 6 2 4 1 5 9 ]
**桶號[ 4 1 2 1 3 5 ]
入桶規則
1號桶 2,1
2號桶 4
3號桶 5
4號桶 6
5號桶 9
1號桶內兩個數字使用任意排序演算法使之有序,其它桶如果此種情況同樣需要在桶內排序,使用什麼排序演算法不重要,重要的是排成從小到大即可
最後順序從桶裡取出來即可
[1 2 4 5 6 9]
參考
返回主目錄 [經典排序演算法][集錦]
經典排序演算法
排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...
經典排序演算法
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...
經典排序演算法
思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...