比如說乙個陣列
6,1,2,7,9,4,5,10,8
int a=;快排有三個要素:基準flag、左哨兵i、右哨兵
為了方便一般以陣列的第一位作為flag基準
記住,每次動都是右哨兵j先動,j從8開始探測,尋找比基準6小的數,j--
i從6開始探測尋找比基準6大的數,i++,交換
交換完為止,還是從右哨兵j開始探測,尋找比基準6小的數
左哨兵i++探測比基準大的數,交換
交換完為止,還是從右哨兵j開始探測,尋找比基準6小的數,找到了3
左哨兵i++探測比基準大的數
兩個哨兵相遇了,就不能繼續走了
然後此時將該位置的3和基準交換
這時候,原序列就被分為兩個序列了,左序列為3 1 2 5 4右序列為9 7 10 8
接下來就需要處理這兩個序列,首先都是處理左序列3 1 2 5 4
基準為3 繼續上邊的操作 調整過後2 1 3 5 4
左序列為2 1 調整過後為 1 2 3 5 4 6 9 7 10 8
右序列調整 1 2 3 4 59 7 10 8
接下來處理右序列 9 7 10 8 同樣的方法
**如下
1public
class
quicksort
27while(start < end && a[end] >=base)
28//
從右邊開始遍歷,如果比基準值大,就繼續向左走
29 end--;
30//
上面的while迴圈結束時,就說明當前的a[end]的值比基準值小,應與基準值進行交換
31if(start
3940
} 41
//這裡返回start或者end皆可,此時的start和end都為基準值所在的位置
42return
end;
43}
4445
/**46
* 排序
47*
@param
a 48
* @param
start
49*
@param
end
50*/
51public
static
void sort(int a, int start, int
end)
56else
6263}
64public
static
void
main(string args) ;
67int c = new
int;
68int d = new
int;
69int a = new
int;
7071 sort(a, 0, a.length-1);
7273 system.out.println("排序後的結果:");
74for(int
x : a)
77}
7879 }
基本排序演算法之3 快速排序quicksort
快排的思路就不說了,中軸分組,借助乙個臨時單元。時間複雜度o nlogn 下面是實現 includeusing namespace std templatebool less t a,t b a first temp qsort a,first,f qsort a last 1,n last 1,f...
第七章快速排序之「快速排序QUICKSORT」
include using namespace std int partition int a,int lo,int hi while a j key if i j else return j void quicksort int a,int lo,int hi int j partition a,...
python實現快速排序 quick sort
快速排序 quick sort 又稱劃分交換排序 partition exchange sort 通過一輪取乙個元素作為中間值,將要排序的資料分割成兩部分,其中一部分的所有資料都比這個中間值都要小,另外一部分的所有資料都比這個中間值要大,然後再次按此方法依次對這兩部分資料分別再次進行快速排序,注意在...