排序算法——快速排序

快速排序

快速排序的指導思想:分治法

原理:一個數組: 43、29、71、99、78、19、24、45首先我們需要在數列中選擇一個基準數,我們一般會選擇中間的一個數或者頭尾的數,這裏直接選擇第 1 個數 43 作爲基準數,接着把比 43 小的數字移動到左邊,把比 43 大的數字移動到右邊,對於相等的數字不做移動。所以實際上我們需要找到中間的某個位置 k,這樣 k 左邊的值全部比 k 上的值小,k 右邊的值全部比 k 上的值大

首先從數列的右邊開始往左邊找,我們設這個下標爲 j,也就是進行減減操作(j–),找到第 1 個比基準數小的值,讓它與基準值交換;接着從左邊開始往右邊找,設這個下標爲 i,然後執行加加操作(i++),找到第 1 個比基準數大的值,讓它與基準值交換;然後繼續尋找,直到 i 與 j 相遇時結束,最後基準值所在的位置即 k 的位置,也就是說 k 左邊的值均比 k 上的值小,而 k 右邊的值都比 k 上的值大。

比如:數組:43、29、71、99、78、19、24、45,基數選43 i的起始位置爲1 j的起始位置是7

  1. 從右側開始遍歷,j–,直到找到比43小的數字,24,交換基數和24的位置 此時j:6數組:24、29、71、99、78、19、43、45
  2. 然後從左側遍歷,i++,直到找到比43大的數字,71,交換位置,此時i:2數組:24、29、43、99、78、19、71、45
  3. 然後再從右側繼續遍歷,j–,直到找到比43小的數字,19,此時j:5 數組:24、29、19、99、78、43、71、45
  4. 然後再從左側繼續遍歷,i++,直到找到比43大的數字,99,此時i:3 數組:24、29、19、43、78、99、71、45
  5. 然後再從右側繼續遍歷,j–,發現當j=5時和j=4時,分別爲78和43都不符合交換位置,然後j=3,發現此時j=i,此時就可以結束第一輪的遍歷了。

此時的數組:24、29、19、43、78、99、71、45,此時基數43左側的都比43右側的小,然後再以43爲分水嶺分兩個數組
24、29、19、43和78、99、71、45 然後再分別按照上面的方式遍歷排序,然後再分,直到最後有序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章