終於到了要實現快速排序的時候了。
快速排序原理
我們先來回顧一下快速排序的原理,可分為「分」、「治」兩步:
分1.1 分割槽:將待排數列分成左區、軸和右區; 1.2 對分出來的左區和右區再分別進行分割槽,持續迭代。
治:當分出來的分割槽長度為 1 或 0 時,就無須再分了,至此,關於本區域的分割槽迭代停止。
從原理到實現
如果對應到程式中,2可以對應為乙個判斷條件,1.1 是分割槽函式,那麼 1.2 呢?
關於 1.2,我們可以理解為繼續進行分割槽。
比如,將 1.1 分出來的左區,再將左區分為左左區和左右區。如果左左區或左右區不滿足長度為 1 或 0 的條件,還要繼續對它(們)分割槽……對右區的操作亦如是。
因此 1.2 並不是簡單的重複 1.1,而是援引整個演算法本身——這正是遞迴適合處理的情況。
遞迴式快排的程式設計實現
所以,我們可以用遞迴來完成快速排序:
def qsortrecursion(arr, low, high):
if low >= high:
return
p = partition(arr, low, high)
qsortrecursion(arr, low, p - 1)
q
快速排序演算法實現(遞迴實現 棧實現)
基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...
快速排序 遞迴演算法
快速排序原理 從乙個陣列中任意挑選乙個元素 通常為最左邊的元素 作為基準數,將剩下的元素和基準數進行比較,將小於等於中軸元素的放到基準數的左邊,經大於 中軸元素的放到基準數的右邊,然後以當前基準數的位置為界,將左半部分陣列和右 半部分陣列堪稱兩個新的陣列,重複上述操作,直到子陣列的元素個數小於等於1...
快速排序 遞迴實現
快速排序演算法 用到了 分治法 遞迴演算法 package com.xiahui public class quicksort quicksort quicksort new quicksort quicksort.quicksort a,0,6 for int i 0 i a.length i p...