【原理】
整個過程其實只需三步:
1.在一列陣列中,選擇其中乙個資料作為「基準」。
2.所有小於「基準」的資料,都移到「基準」的左邊,所有大於「基準」的資料,都移到「基準」的右邊。
3.對於「基準」左邊和右邊的兩個子集,不斷重複第一步和第二步。直到所有的資料子集只剩下乙個資料為止。
【用例】
現有一組資料如下:
[ 8 , 2 , 6 , 4 , 1 , 3 , 9 , 5 ]
第一步:(假如選4為基準),
[ 8 , 2 , 6 ,4, 1 , 3 , 9 , 5 ]
第二步:將每個資料與4對比,"<=4"左邊,「>4」放右邊。
[ 2 , 1 , 3 ]4[ 8 , 6 , 9 , 5 ]
第三步:兩個子陣列,重複第一步選「選基準」和第二步「放置資料」。4的位置後面都不會動的。
[ 2 ,1, 3 ]4[ 8 ,6, 9 , 5 ]
1[ 2 ,3 ]4[ 5 ]6[ 8 , 9 ]
最後:[ 1 , 2 , 3 , 4 , 5 , 6 , 8 , 9 ]
【**實現】
packagecom.sort;
public
class
testquicksort
int i=low,j=high;
int index=array[i]; //
index為"基準"
while(iif(iwhile(i//
尋找》=基準值的數字array[i],退出迴圈
i++;
}if(i////
將找到的那個大於或等於基準值的數字覆蓋了array[j],此時array[i]會有重複了
array[j]=array[i];
j--;
}}
//這個一次迴圈結束:1.所有小於index的數字會都在index左邊,所有大於或等於index的數字會在右邊
array[i]=index; //
array[i]位置固定好了,剛好覆蓋重複的那個值
sort(array,low,i-1); //
遞迴左邊的小於index但未排序的資料
sort(array,i+1,high); //
遞迴右邊的大於index但未排序的資料
}
public
static
void quicksort(int
array)
public
static
void
main(string args);
quicksort(a);
for(int i=0;i)
}}
30 排序 快速排序
排序也是我們經常用到的一種演算法,之前我們遇到的有氣泡排序,選擇排序等。那麼我們就開始主要梳理一下排序演算法,並且重點理解出現頻率比較高的快速排序的方法。推薦看這個人的部落格,非常的詳細了。快速排序 適用場景 資料量大,快速排序是目前基於比較的排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,...
2 排序演算法 快速排序
問題描述 利用快速排序演算法對下列例項排序,在演算法執行過程中,寫出陣列 a第一次排序後被分割的過程。a 65,70,75,80,85,55,50,2 解題思想 在快速排序中,記錄的比較和交換是從兩端向中間進行的,關鍵字較大的記錄一次就能交換到後面的單元,總的比較和移動次數較少。對於輸入的陣列a p...
四 排序演算法 快速排序
快速排序的思想 選擇陣列中的乙個數作為中軸線,然後以這個中軸線為中心,大於中軸線的資料放到右邊,小於中軸線的資料放到左邊,然後每次比較完後再變中軸線的位置,不斷比較下去 include using namespace std template void quick sort t arry,int l...