正確答案: A 你的答案: A (正確)
每次分區後,先處理較短的部分
每次分區後,先處理較長的部分
與算法每次分區後的處理順序無關
以上三者都不對
正確答案: D 你的答案: C (錯誤)
遞歸次數與初始數據的排列次序無關
每次劃分後,先處理較長的分區可以減少遞歸次數
每次劃分後,先處理較短的分區可以減少遞歸次數
遞歸次數與每次劃分後得到的分區處理順序無關
A選項:快速排序中,如果序列初始化就有序:123456,那麼明顯只需要遞歸一次就好了,因爲右邊先啓動的哨兵一直走呀走走到數字1的位置才停下來,那下面就已經無需再遞歸了,直接得出結果了(這裏需要事先理解快速排序的流程,可參考我的另一篇博客:快速排序C++)。所以顯然至少在快排當中,遞歸的次數是跟初始數據的排列次序是有關的。
後面三個選項:每次劃分應該先處理較短的分區,只是減少遞歸佔用的內存空間(每次調用棧的深度),並不能減少次數,該比較那麼多次還是得比較那麼多次。每次劃分先處理較短的分區,那其實相當於:切瓜子,固定要均分切成一樣厚度的薄片,然後我每次拿較短的一段先切掉,然後再回到長的一段繼續分切,其實最終要切的次數還是那麼多的,只是會給人一種心理安慰似的,因爲每次不用切太久(遞歸深度較淺)我就切完了一段,很有成就感是吧。。。然而最終要切的次數還是一樣多的。