我的理解如下,若有錯煩請指教:
快速排序之流程為先選定樞紐值(pivot),然後從以樞紐值為中心遞迴排序左右側的數值。我個人會先設計一個partition函數暫定數列的最後一個數(此例中為20)作為樞紐,並由數列的最左開始依序將比樞紐值小的數字放到數列的前方,最後再把樞紐值插入到正確的位置,不考慮遞迴而以迴圈執行的第一次程序如下:
- 設定樞紐值為20。
- 設定一個指標i指向數列開頭的前一格(此刻i應該是位於 array.index(50)-1 的一個暫定位置),用來記錄所有值應該插入的位置。
- 遍歷數列尋找比20小的數字。
- 找到10,將指標i+1(使其指向50),然後將50和10交換。
- 遍歷完畢,再將指標i+1(指向60),然後與樞紐所處位置的值互換,第一輪結束。
- 因此,現在的數列為10, 20, 70, 80, 40, 90, 50, 30, 60。
以上,我的最終答案為10, 20, 70, 80, 40, 90, 50, 30, 60。