分治法 快速排序 quicksort

2022-08-21 05:57:10 字數 884 閱讀 7450

先上**

#include using namespace std;

int partition(int a,int low, int high)

return j;

}void quicksort(int a,int low, int high)

}int main()

; quicksort(arr,0,9);

for(int i = 0; i < 10; i++)

cout《在上篇部落格,歸併排序裡面提到的分治法三步驟。分、治、合併。

快速排序裡面主要步驟是第一步,劃分。

首先取序列裡面的第乙個元素作為基準 pivot,然後將序列劃分為兩部分,一部分大於 pivot,一部分小於 pivot。( pivot = a[low] )

劃分的具體辦法:定義兩根指標 i 和 j,i 從序列的最左邊開始往右,j 從序列的最右邊往左。當 i < j 的時候進行一下操作:

1基準pivot的位置和 i 的位置是相同的。這種情況下,就應該對 j 進行操作。 當  arr[j] >= pivot 的時候,直接 j - -。直到不符合這個條件的時候就交換基準和 a[j] 的的值,這個時候基準也就是 a[j]。

2基準的位置和 j 的位置是相同的。這種情況下,就應該對 i 進行操作。 當  arr[i] <= pivot 的時候,直接 i ++。直到不符合這個條件的時候就交換基準和 a[i] 的的值,這個時候基準的位置又是 i 的位置。

就可以重複1步驟。然後繼續執行迴圈執行 1、2 操作。

當 i 和 j 相等的時候,返回 i 或者 j 的值。就是劃分的區間位置。

按照這種方法不斷地劃分序列,到最後序列只有乙個元素的時候,合併序列,合併後的序列就是有序的。

分治法 快速排序

演算法的思想 將大的問題化為小問題 問題性質不變 快速排序是在比較排序中相對較快,所以稱為快速排序。對於乙個陣列a n 快速排序中分界值需要取n次也就是說,每乙個下標對應的值都需要取一次。源 如下 include using namespace std template int partition ...

快速排序,分治法

平均時間複雜度是 o nlogn 在傳入的陣列為倒序時,將出現最壞的情況,時間複雜度為o n 2 private static void myquicksort int arr,int start,int end int divideindex divide arr,start,end 分治法,按d...

分治法 快速排序

快速分類是一種基於劃分的分類方法 劃分 選取待分類集合a中的某個元素t,按照與t的大小關係重新整理a中元素,使得整理後的序列中所有在t以前出現的元素均小於等於t,而所有出現在t以後的元素均大於等於t。這一元素的整理過程稱為劃分 partitioning 元素t稱為劃分元素。快速分類 通過反覆地對待排...