本節的主題是快速排序,他可能是應用廣泛的排序演算法了。優點:
缺點:非常脆弱,在實現時要非常小心才能避免低劣的效能。
與歸併排序的比較
快速排序與歸併排序是互補的:歸併排序將陣列分成兩個子陣列分別排序,並將有序的子陣列歸併並以整個陣列排序;而快速排序將陣列排序的方式則是當兩個子陣列都有序時整個陣列也就自然有序了。在第一種情況中,遞迴呼叫發生在處理整個陣列之前;在第二種情況中,遞迴呼叫發生在處理整個陣列之後。在歸併排序中,乙個陣列被等分成兩半;在快速排序中,切分的位置取決於陣列的內容。
該方法的關鍵在於切分,這個過程使得陣列滿足下面三個條件:
我們就是通過遞迴呼叫切分來排序的。
因為排序過程總是能排定乙個元素,用歸納法不難證明遞迴能夠正確地將陣列排序:如果左子陣列和右子陣列都是有序的,那麼由左子陣列(有序且沒有任何元素大於切分元素)、切分元素和右子陣列(有序且沒有任何元素小於切分元素)組成的結果陣列也一定有序的。
原地切分
如果使用乙個輔助陣列,我們將很容易實現切分,但將切分後的陣列複製回去的開銷也許會使我們得不償失。
別越界
如果是切分元素是,陣列中最大或最小的那個元素,我們要小心掃瞄指標跑出陣列的邊界。
第二章 快速排序
快速排序演算法也是基於分治思想的一種排序演算法,它的基本操作即為比較 交換。快速排序演算法的基本思想是從待排序的序列中選取乙個比較標準k 通常選取第乙個元素 然後將其餘元素依次跟k進行比較。在比較的過程中將大於k的元素移到k的後面,將小於k的元素移到k的前面,最後的結果是將原始序列分為兩個子串行,而...
演算法第二章 快速排序
先把快速排序的 實現貼上來,太晚了,過程改天再加上!快速排序就是把乙個數拿出來,然後把小於這個數的扔到一邊,把大於它的扔到一邊,那這個數就在正確的位置上了 然後把這個數的左邊分成乙份,右邊分成乙份,再把這兩份進行剛才的做法,一直不停地這樣做,直到不能再分。接下來就要說明怎麼把小於它的數扔到一邊,大於...
第二章 2 3節
2.3 1 使用圖2 4作為模型,說明歸併排序再陣列a 3,41,52,26,38,57,9,49 解答 兩個數中間的 號為連線符,代表 號兩邊的數歸併一起。3 41 52 26 38 57 9 49 3 41 26 52 38 57 9 49 3 26 41 52 9 38 49 57 3 9 2...