分治法 快速排序

2021-07-29 12:44:31 字數 703 閱讀 8053

演算法的思想:將大的問題化為小問題;問題性質不變

快速排序是在比較排序中相對較快,所以稱為快速排序。對於乙個陣列a[n]快速排序中分界值需要取n次也就是說,每乙個下標對應的值都需要取一次。

源**如下:

#include using namespace std;

template int partition(type a,int p,int r)

a[p]=a[j];//將分界值放在分界處

a[j]=x;

return j;//返回分界值

}template void qs(type a,int p,int r)

qs(a, 0, n-1);

for(int i=0;i

下面是乙個簡單的示範:

a5 4 739 8 

下標0 1 2 3 4 5

第一次時,取分界值x=5並且分別從左和從右開始比較,比較完之後i對應下標2,j對應下標3次時,因為i,所以,交換a[i],a[j]的值。即:

a5 4 379 8 

下標0 1 2 3 4 5

繼續比較。依次類推知道確定分界值x=5的下標,再對左半邊進行排序,對右半邊進行排序。

參考資料:高等學校規劃教材計算機演算法設計與分析(第4版)◎王曉東編著

快速排序,分治法

平均時間複雜度是 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稱為劃分元素。快速分類 通過反覆地對待排...

快速排序 分治法

include using namespace std 分治策略 1.分解 將原序列a s.t 分解成兩個子串行a s.i 1 和a i 1.t 其中i為劃分的基準位置,即將整個問題分解為兩個子問題 2.求解子問題 若子串行長度為0或1,則它是有序的,直接返回 否則遞迴地求解各個子問題 3.合併 由...