天天看點

快速排序算法QuickSort(二)

隻是修改了int Partition(int arry[],int start,int end)這個方法。

仔細觀察我們可以發現,我們前面Partition方法中,都需要swap(arry,start,end), 但是這一步中有些步驟是可以省略的。 

在(<-end)過程中,碰到第一個小于等于pivot的元素時,隻需要進行一次指派arry[start]=arry[end]; 因為目前的arry[start]是值就是pivot ;

在(start->)過程中,碰到第一個大于等于pivot的元素之,隻需要進行一次指派arry[end]=arry[start]; 因為目前的arry[end]的值就是pivot的值。

整個過程中,不是start就是end指向pivot所存儲的單元 ,是以在整個過程中,pivot沒有必要每次通過swap來儲存,隻需要在最後找到pivotkey的時候, 令arry[pivotkey]=pivot即可。 

具體修改如下代碼執行個體。

View Code

今天發現以前一直以為對的快排寫錯了,是以沒有考慮需要排序的數相等的情況,如果排序的數組中有相同的數,那麼就會出現死循環,一直沒有結果,要做的修改就是修改Partition函數,修改以後如下:

做的唯一修改就是将原來的arry[end]>pivot改為arry[end]>=pivot,arry[start]<pivot改為arry[start]<=pivot

本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2011/06/16/2296999.html,如需轉載請自行聯系原作者