演算法說明
假設煎鍋裡邊有n個煎餅摞在了一起,它們大小不一並且順序不一致,我們需要通過拿鏟子將它們不停的翻個,進行排序,最終得到乙個底下是大的煎餅,上邊是小的煎餅的序列。這個排序的過程就是煎餅排序。
這個演算法有兩種解,一種是普通解,一種是最優解。
普通論證:
例如你的初始煎餅順序是[2,4,3,1]
然後2與4交換位置,然後4與1交換位置,得出[1,3,2,4]。
然後3與1交換位置,接著3與2交換位置,得出[2,1,3,4]。
最後2與1交換位置,得出結果[1,2,3,4]
通過普通解的過程,我們能對演算法做乙個總結:
我們其實每次都是兩兩比較煎餅,然後先將大煎餅放到最上邊去,然後再把大煎餅放到最下邊去。如果是n個煎餅,那麼我們要進行2*n次。 不過我們注意一下。在2與1進行交換時,我們只做了一次,也就是說,當只有最後一組數字時,我們只需要排序一次就可以,所以我們有2*(n-2)+1,那麼最後結果是2n-3
當然我們這個時間複雜度只是排序的,查詢的時間複雜度沒有計算在內的。
最優解論證:
話說找到的最優解是(15/14)n≦ f(n) ≦ (5n+5)/3
不過沒有找到論證的資料,而且找到後我估計我也看不懂,所以就不來論證了,發出來記錄一下,以後有能力弄懂後再回來這裡補充
總結:煎餅排序感覺對於我們實際應用場景來說不是很實用,就當開闊一下思路啦。
**
因為要考試,所以暫時先不寫,以後補上
參考
Hark的資料結構與演算法練習之煎餅排序
演算法說明 假設煎鍋裡邊有n個煎餅摞在了一起,它們大小不一並且順序不一致,我們需要通過拿鏟子將它們不停的翻個,進行排序,最終得到乙個底下是大的煎餅,上邊是小的煎餅的序列。這個排序的過程就是煎餅排序。這個演算法有兩種解,一種是普通解,一種是最優解。普通論證 例如你的初始煎餅順序是 2,4,3,1 然後...
Hark的資料結構與演算法練習之耐心排序
演算法說明 耐心排序是插入排序的一種,至少wikipedia是這麼分的。話說我明白這個演算法的實現思路了,但是不明白這麼做的意義何在?如果明白的朋友幫忙留個言說一下,以後如果我明白的話,我會來修改這個博文記錄清楚的。其實這個演算法很簡單,先是自動分桶 哈哈,有別於桶排序,耐心排序的分桶是根據實際待排...
Hark的資料結構與演算法練習之簡單選擇排序
簡單選擇排序 public class sort sortmethod arraydata for int integer arraydata 時間複雜度 因為是雙迴圈求解,所以是o n 2 空間複雜度 使用的臨時空間大小是乙個常量,而不是與n有關係,所以空間複雜度是o 1 說明 其實與冒泡的排序大...