Hark的資料結構與演算法練習之耐心排序

2022-01-31 08:29:13 字數 922 閱讀 3613

演算法說明

耐心排序是插入排序的一種,至少wikipedia是這麼分的。

話說我明白這個演算法的實現思路了,但是不明白這麼做的意義何在? 如果明白的朋友幫忙留個言說一下,以後如果我明白的話,我會來修改這個博文記錄清楚的。

其實這個演算法很簡單,先是自動分桶(哈哈,有別於桶排序,耐心排序的分桶是根據實際待排陣列的元素動態分桶的),然後再把桶合併再執行插入函式,大概流程如下:

流程**這裡,人家寫的很好了,所以我就直接copy過來了:

舉個例子,待排陣列[6 4 5 1 8 7 2 3]

第一步,取數字6出來,此時乙個桶沒有,根據建桶規則1新建桶,將把自己放進去,為了表述方便該桶命名為桶1或者1號桶

第二步,取數字4出來,由於4符合桶1的入桶規則,所以入桶1,並放置在6上邊,如下圖2所示

第三步,取數字5出來,由於5不符合桶1的入桶規則,比桶1裡最上邊的數字大,此時又沒有其它桶,那麼根據建桶規則新建桶2,放入住該桶

第四步,取數字1出來,1即符合入1號桶的規則,比4小嘛,也符合入2號桶的規則,比5也小,兩個都可以入,根據入桶規則1入住1號桶(實際入住2號桶也沒關係)

第五步,取數字8出來,8比1號桶的掌門1大,比2號桶的掌門5也大,而且就這倆桶,所以8決定自立門派,建立了3號桶,併入住該桶成為首位掌門

第六步,取數字7出來,1號桶,2號桶的掌門都不行,最後被3號桶收服,投奔了3號桶的門下

第七步,取數字2出來,被2號桶掌門收了

第八步,取數字3出來,被3號桶的現任掌門7收了

全部入桶完畢....

然後從第乙個桶順序取出數字1 4 6,2 5,3 7 8

剩下的使用插入排序結束戰鬥

**

因為最近要考試了,所以**先不寫了,以後有時間要補上的。

參考

Hark的資料結構與演算法練習之煎餅排序

演算法說明 假設煎鍋裡邊有n個煎餅摞在了一起,它們大小不一並且順序不一致,我們需要通過拿鏟子將它們不停的翻個,進行排序,最終得到乙個底下是大的煎餅,上邊是小的煎餅的序列。這個排序的過程就是煎餅排序。這個演算法有兩種解,一種是普通解,一種是最優解。普通論證 例如你的初始煎餅順序是 2,4,3,1 然後...

Hark的資料結構與演算法練習之煎餅排序

演算法說明 假設煎鍋裡邊有n個煎餅摞在了一起,它們大小不一並且順序不一致,我們需要通過拿鏟子將它們不停的翻個,進行排序,最終得到乙個底下是大的煎餅,上邊是小的煎餅的序列。這個排序的過程就是煎餅排序。這個演算法有兩種解,一種是普通解,一種是最優解。普通論證 例如你的初始煎餅順序是 2,4,3,1 然後...

Hark的資料結構與演算法練習之簡單選擇排序

簡單選擇排序 public class sort sortmethod arraydata for int integer arraydata 時間複雜度 因為是雙迴圈求解,所以是o n 2 空間複雜度 使用的臨時空間大小是乙個常量,而不是與n有關係,所以空間複雜度是o 1 說明 其實與冒泡的排序大...