快速排序 分治

2022-09-20 07:48:16 字數 1158 閱讀 2106

我之前有寫過相關快速排序的,但是因為當時對遞迴和分治的思維還是不夠熟悉。所以對快速排序一知半解,現在再來做乙個總結:

首先快速排序步驟如下:

1,設k = a[0],將k挪到適當的位置,使得比k小的元素在k的左邊,比k大的元素在k的右邊,和k是相等的,不關心在k左右均可。

2,對k的左邊進行快速排序

3,對k的右邊進行快速排序。

後面對過程進行一步步的分析:

k就是開頭的紅色的數字,j其實就是最尾巴的乙個數字。現在就是要把j與i來比較,如果a[j]對應的值是大於k的值的話,那就不進行交換,進行j--。

現在j到了2的位置,2是小於k的所以進行交換。進行了一次交換後(現在是進行了一次奇數次的交換),就開始i往前走了(現在轉尾偶數次了)。

知道找到了乙個8了進行交換(現在是偶數次的交換了),偶數次的交換時左往右交換。現在又是從右邊開始往裡找了。

現在就是第一次快速排序進行完了的時候。後面寫一下快速排序的**。

**:

void quicksort(int a,int s,int

e)

int k = a[0

];

while(i !=j )

//注意每次都是先進行 右邊的交換

swap(a[i],a[j]);

while(jk)

//右邊的交換完了之後在進行左邊的交換。

swap(a[i],a[j]);

}//這個i這個迴圈結束了就是中間的位置

quicksort(a,s,i-1

);

//對左邊進行快速排序

quicksort(a,i+1

,e);

//對右邊進行快速排序

}

分治 快速排序

快速排序陣列元素的思想 1 設k a 0 將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k右邊,和k相等的,不關心在k左右出現均可 o n 時間完成 2 把k左邊的部分快速排序 3 把k右邊的部分快速排序 class program quicksort a,0,a.length 1 ...

分治 快速排序

快速排序陣列元素的思想 1 設k a 0 將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k右邊,和k相等的,不關心在k左右出現均可 o n 時間完成 2 把k左邊的部分快速排序 3 把k右邊的部分快速排序 class program quicksort a,0,a.length 1 ...

分治策略 快速排序

快速排序演算法是基於分治策略的另乙個排序演算法。其基本思想是 對輸入的子陣列a p r 按以下三個步驟進行排序。1 分解 divide 以a p 為基準元素將a p r 劃分成3段a p q 1 a q 和a q 1 r 使得a p q 1 中任何乙個元素小於等於a q 而a q 1 r 中任何乙個...