快速排序,分治法

2021-09-24 04:20:43 字數 558 閱讀 8455

平均時間複雜度是 o(nlogn);在傳入的陣列為倒序時,將出現最壞的情況,時間複雜度為o(n^2)

private static void myquicksort(int arr, int start, int end) 

int divideindex = divide(arr, start, end);

//分治法,按divideindex將陣列分成兩部分達到分治的效果

myquicksort(arr,start,divideindex-1);

myquicksort(arr,divideindex+1,end);

}//返回陣列中的索引,將其劃分為兩部分

private static int divide(int arr, int start, int end)

start++;}}

//!!將開始取出的中心點賦值到陣列的中心位置

arr[divideindex]=pivot;

return divideindex;

}

快排**參考:

演算法系列參考:

分治法 快速排序

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

分治法 快速排序

快速分類是一種基於劃分的分類方法 劃分 選取待分類集合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.合併 由...