1. 程式人生 > >快速排序法為什麼一定要從右邊開始

快速排序法為什麼一定要從右邊開始

  1. while(arr[j]>=temp&&i<j){
  2. j--;
  3. }
  4. while(arr[i]<=temp&&i<j){
  5. i++;
  6. }

這裡兩個while的順序是不能改變的,想一想:

假設對如下進行排序:

如上圖,6在左,9在右  我們將6作為基數。

假設從左邊開始(與正確程式正好相反)

於是i 就會移動到現在的 數字 7 那個位置停下來,而  j 原來在 數字 9 那個位置 ,因為

 
  1. while(arr[j]>=temp&&i<j)

於是,j 也會停留在數字7 那個位置,於是問題來了。當你最後交換基數6與7時,不對呀!!。

問題在於當我們先從在邊開始時,那麼 i 所停留的那個位置肯定是大於基數6的,而在上述例子中,為了滿足 i<j 於是 j也停留在7的位置

但最後交換回去的時候,7就到了左邊,不行,因為我們原本 交換後數字6在邊應該是全部小於6,右邊全部大於6.但現在不行了。

於是,我們必須從右邊開始,也就是從基數的對面開始。