05 排序 快速排序

2022-04-20 02:51:08 字數 1513 閱讀 5615

【原理】

整個過程其實只需三步:

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 ]

【**實現】

package

com.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...