基本原理
快速排序是C.R.A.Hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法(Divide-and-ConquerMethod)。
快速排序由於排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想----分治法也確實實用。
快速排序的基本思想是:
先從數列中取出一個數作為基準數。
分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
再對左右區間重複第二步,直到各區間只有一個數,達到整個序列有序。
1.先從數列中取出一個數作為基準數。
2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有一個數,達到整個序列有序。
具體方法描述
具體的方法描述如下:在當前無序區R[1]到R[h]到中任取一個記錄作為比較的“基準”(通常取第一個記錄的值為基準值,記為pivot),用此基準將當前無序區劃分為左右兩個較小的無序子區:R[1]到R[i—1]和R[i+1]到R[h].且左邊的無序子區中記錄的關鍵字均小於或等於基準pivot的關鍵字,右邊的無序子區中記錄的關鍵字均大於或等於基準pivot的關鍵字,而基準pivot則位於最終排序的位置i上,這個過程稱為一次劃分。
為方便實現該算法。附設兩個指針low和high,初值分別指向第一個記錄和最後一個記錄。首先從high所指位置起向前搜尋,找到第一個小於基準值的記錄與基準記錄交換,然後從low所指位置起向後搜尋,找到第一個大於基準值的記錄與基準記錄交換,重複這兩步直至low=high為止。當R[l]到R[i一1]和R[i+1]到R[h]均非空時,分別對它們進行上述的劃分過程,直至所有無序子區中記錄均已排好序為止。