經典排序演算法 Flash Sort

2021-09-08 02:20:37 字數 1094 閱讀 1784

經典排序演算法 - 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 原理 用乙個索引位置上的元素,...