1. 程式人生 > >快排為什麼一定要重右邊開始?

快排為什麼一定要重右邊開始?

今天剛好同事問了下,為什麼以前背的快排一定要從右邊開始?剛好也順便給大家做個總結。

 

其實快排沒有一定要重右邊開始,只是看你基數的位置,如果你基數選的是最左邊的。你一定要確保,你交換基礎的時候,保證那個數要小於基數。但是你重右邊開始,就無法保證了。

 

比如你有

2 1 4 9           首先左邊left 會 跑到 4這裡,這樣9也會到4.然後進行交換。顯然就出錯了。 肯定不可能 4  1 2 9 所以為什麼不能左邊開始。

 

當你從右邊開始的時候,就一定是可以保證    那個數一定是小於等於基數的, 比如 上面就會找到  1  就會 1 2 4 9 這樣2 歸位。

或者說最不濟的情況, 找不到小於基數的 。 比如  2  3  4 9  。 右邊開始,這樣也會定位到2的本身, 頂多這次交換是 2 和2 的交換。 2 3 4 9  。

 

 

明白了嗎 ?  主要就是從左邊開始,你不能保證你最後交換的那個數,是小於等於左邊的。

如果你硬是要從左邊開始,那麼你的基數就選右邊的把 。