隻是修改了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,如需轉載請自行聯系原作者