1. 程式人生 > >5個數排列所需的最少比較次數

5個數排列所需的最少比較次數

5 個數最快的排序, H.B.Demuth 於 1956 年在他的博士論文中提出了以下方法:

開始時,就像用合併對4個元素排序一樣,首先比較a:b,接著 c:d,然後把每對的較大者拿來比較,這就產生了a<b<d和 c<d, 進行 3 次比較, 可以找到如下有序關係 (以下圖中所有連線均表示左下元素比右上元素小)
 b--d
 /    /
a c e

這時,我們把第5個元素e,插入到{a,b,d}當中的適當位置,只需比較兩次,首先同b進行比較,而後同a或d進行比較,就有如圖所示的四種情況
    b-d   e-b-d    b-e-d    b-d-e
    /  /        /   /      /    /       /  /
e-a c     a  c     a   c     a c
對以上任意一種情況, 總可以通過兩次比較將 c 調整入由 abde 構成的有序隊中 (用二分的思想)
這樣處理後總共需要比較 3 + 2 + 2 = 7 次, 能選出答案 7 並且解答過程無誤的可以給雙倍的分
資料來源: [Ph.D.thesis, Standford University(1956), 41~43]
同時在 D.E.Knuth 的著作 <計算機程式設計藝術> (The Art of Computer Progamming) 第三卷(排序和查詢) 173 頁至 174 頁對這個問題有一個詳細的解釋.