@(演算法學習)
(2014.11)下列選項中,不可能是快速排序第二趟排序結果的是:
a. 2,3,5,4,6,7,9
b. 2,7,5,6,4,3,9
c. 3,2,5,4,7,6,9
d. 4,2,3,5,7,6,9
分析:只需要掌握一點就可以解出這個問題:每趟排序就有乙個元素排在了最終的位置上。那麼就是說,第n趟結束,至少有n個元素已經排在了最終的位置上。
所以我們把最終排序結果寫出來:
2,3,4,5,6,7,9去與每一項做比較即可快速判斷。
比如a:
2,3,4,5,6,7,9
2,3,5,4,6,7,9
有五個都已經滿足了,則肯定可以是2趟快排的結果。
b: 2,3,4,5,6,7,9
2,7,5,6,4,3,9
有兩個,則滿足。
c: 2,3,4,5,6,7,9
3,2,5,4,7,6,9
只有乙個,不滿足。
d: 2,3,4,5,6,7,9
4,2,3,5,7,6,9
有兩個滿足。
反之,找到兩個就可以死反向構造符合條件的快排。比如我們以d為例,且以嚴版演算法為準,每次partion時用第乙個為pivot。
4,2,3,5,7,6,9
假設第二趟定位了9,則可以是:
9,2,3,5,7,6,4
即以9為pivot,從右往左找比9小的,high指向4結束,將4存到9的位置。
4,2,3,5,7,6,4–
4_ 在從左往右找比9大的,一直跑到low = high,都未找到,因此,結束迴圈。迴圈之外,把9放到劃線的4的位置。
4,2,3,5,7,6,9.
再倒推到第一趟:
5,2,3,4,7,6,9.
描述過程:以5為pivot,從右往左找比5小的,找到4,交換到5的位置:4,2,3,4–
4_,7,6,9.
再從左往右找比5大的,注意當low = high時結束尋找強制結束,所以這裡找不到,因為會在劃線處low = high.
再把5放到劃線處,本次partion結束。
變為:
4,2,3,5,7,6,9.
舉個例子只是想說,只要滿足第n趟有至少n個已經排好位置的元素,則一定有對應的快速排序過程。逆向推導過程大多情況下是不必要的。
@(演算法學習)
排序之一趟快排
題目 資料結構實驗之排序一 一趟快排 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 給定n個長整型範圍內的整數,要求輸出以給定資料中第乙個數為樞軸進行一趟快速排序之後的結果...
資料結構實驗之排序一 一趟快排
time limit 1000ms memory limit 65536k 有疑問?點這裡 給定n個長整型範圍內的整數,要求輸出以給定資料中第乙個數為樞軸進行一趟快速排序之後的結果。連續輸入多組資料,每組輸入資料第一行給出正整數n n 10 5 隨後給出n個長整型範圍內的整數,數字間以空格分隔。輸出...
資料結構實驗之排序一 一趟快排
time limit 1000ms memory limit 65536k 給定n個長整型範圍內的整數,要求輸出以給定資料中第乙個數為樞軸進行一趟快速排序之後的結果。連續輸入多組資料,每組輸入資料第一行給出正整數n n 10 5 隨後給出n個長整型範圍內的整數,數字間以空格分隔。輸出一趟快速排序後的...