程式設計之美 一摞烙餅排序

2021-08-04 03:35:20 字數 1451 閱讀 5403

問題:

星期五的晚上,一幫同事在希格瑪大廈附近的「硬碟酒吧」多喝了幾杯。程式設計師多喝了幾杯之後談什麼呢?自然是演算法問題。有個同事說:「我以前在餐館打工,顧客經常點非常多的烙餅。店裡的餅大小不一,我習慣在到達顧客飯桌前,把一摞餅按照大小次序擺好——小的在上面,大的在下面。由於我乙隻手托著盤子,只好用另乙隻手,一次抓住最上面的幾塊餅,把它們上下顛倒個個兒,反覆幾次之後,這摞烙餅就排好序了。我後來想,這實際上是個有趣的排序問題:假設有n塊大小不一的烙餅,那最少要翻幾次,才能達到最後大小有序的結果呢?」

你能否寫出乙個程式,對於n塊大小不一的烙餅,輸出最優化的翻餅過程呢?

首先根據對題目的粗淺理解,寫出的**如下:

public class sortpie;

system.out.println(sort(arr));;

}private static int sort(int arr) 和

圖中路徑i所表示的含義為第0個到第i個元素進行翻轉,因此有了路徑就可以很容易的求出翻轉過程。

的翻轉過程為4,1,2->2,1,4->1,2,4

根據上面的思路,程式如下:

public class bestsortpie ;//烙餅原始陣列

static int searchtime=0;//呼叫search函式的次數

static int pienum=piearr.length;//烙餅個數

static int maxswaptime=pienum*2;//整個過程最大交換次數

static int path=new int[maxswaptime];//儲存烙餅翻轉的分支路徑

public static int resultpath=new int[maxswaptime];//儲存烙餅翻轉的最終分支路徑

public static int temppath=new int[maxswaptime];//儲存烙餅翻轉的臨時分支路徑

public static void main(string args)

} private static int lowbound(int piearr)

else

}return ret;

} private static void search(int step)

if(issorted(piearr))

} }private static boolean issorted(int piearr)

}

程式設計之美 一摞烙餅的排序

問題描述 星期五的晚上,一幫同事在希格瑪大廈附近的 硬碟酒吧 多喝了幾杯。程式設計師多喝了幾杯之後談什麼呢?自然是演算法問題。有個同事說 我以前在餐館打工,顧客經常點非常多的烙餅。店裡的餅大小不一,我習慣在到達顧客飯桌前,把一摞餅按照大小次序擺好 小的在上面,大的在下面。由於我乙隻手托著盤子,只好用...

程式設計之美 一摞烙餅的排序

先想了乙個最簡單的方法 首先對n個烙餅進行處理,找到最大的那個烙餅,將其之上的進行翻轉,然後對前n個烙餅堆進行翻轉 第二次操作對上面n 1個烙餅進行操作,還是找到n 1個中最大的,將其之上的進行翻轉,然後對前n 1個烙餅堆進行翻轉。這樣總共進行n 1次,每次翻轉兩次orz view code 1 i...

程式設計之美1 3 一摞烙餅的排序

程式設計之美 讀書筆記 1.3 一摞烙餅的排序 問題 星期五的晚上,一幫同事在希格瑪大廈附近的 硬碟酒吧 多喝了幾杯。程式設計師多喝了幾杯之後談什麼呢?自然是演算法問題。有個同事說 我以前在餐館打工,顧客經常點非常多的烙餅。店裡的餅大小不一,我習慣在到達顧客飯桌前,把一摞餅按照大小次序擺好 小的在上...