快速排序 分治法

2021-10-25 07:37:11 字數 1140 閱讀 5133

#include

using

namespace std;

/*分治策略

1.分解:將原序列a[s...t]分解成兩個子串行a[s...i-1]和a[i+1...t],其中i為劃分的基準位置,即將整個問題分解為兩個子問題

2.求解子問題:若子串行長度為0或1,則它是有序的,直接返回;否則遞迴地求解各個子問題

3.合併:由於整個序列存放在陣列a中,排序過程是就地進行的,合併步驟不需要執行任何操作

*/void

disp

(int a,

int n)

;int

partition

(int a,

int s,

int t)

;void

quicksort

(int a,

int s,

int t)

;int

main()

;printf

("排序前: ");

disp

(a,n)

;quicksort

(a,0

, n-1)

;printf

("排序後: ");

disp

(a, n)

;return0;

}void

disp

(int a,

int n)

intpartition

(int a,

int s,

int t)

a[i]

= tmp;

return i;

}void

quicksort

(int a,

int s,

int t)}/*

當初始排序資料正序或反序時,遞迴樹高度為n,快速排序呈現最壞情況,即最壞情況下的時間複雜度為o(n^2)

當初始排序資料隨機分布,使每次分成的兩個子區間中的元素個數大致相等時,遞迴樹高度為log2(n),快速排序呈現最好情況,即最好情況下的時間複雜度是o(nlog2(n))

分治法 快速排序

演算法的思想 將大的問題化為小問題 問題性質不變 快速排序是在比較排序中相對較快,所以稱為快速排序。對於乙個陣列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稱為劃分元素。快速分類 通過反覆地對待排...