演算法說明
耐心排序是插入排序的一種,至少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 說明 其實與冒泡的排序大...