啊哈演算法關於快速排序法為什麼一定要從右邊開始的原因

2021-08-28 03:53:26 字數 612 閱讀 8893

while(arr[j]>=temp&&i

while(arr[i]

<=temp&&i

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

假設對如下進行排序:

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

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

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

while(arr[j]>=temp&&i

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

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

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

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

個人理解 關於啊哈演算法裡面快速排序為什麼從右邊開始

書上沒寫 我自己想了想 簡單說下吧 快速排序 使得基準數左邊全是小於基準數 右邊全是大於基準數 主要是基準數 是取左邊第乙個的 先說左邊開始為什麼不可以 就像上面的這個例子 按左邊開始會發生什麼?結果應該是7和6交換了 如果迴圈結束 i!j 那麼基準值就會覆蓋到left的位置 問題來了 如果righ...

快速排序(啊哈演算法)

include include using namespace std int a 101 n void quicksort int left,int right quicksort 1,n for i 1 i n i while arr i temp ii 這裡兩個while的順序是不能改變的,想...

快速排序(啊哈演算法)

include include using namespace std int a 101 n void quicksort int left,int right quicksort 1,n for i 1 i n i while arr i temp ii 這裡兩個while的順序是不能改變的,想...