排序 快速排序

2021-08-29 10:54:44 字數 746 閱讀 9475

快速排序利用分治策略

原理:取陣列中的乙個值pivot做為基準值,對陣列分治,小於pivot分為一組,大於pivot分為一組

遞迴對每個分組繼續分組,直到分組中只有乙個元素

主要包括兩個步驟

1: 以乙個基準值為中心,把陣列分成兩組

2: 對每個分組遞迴分組,直到分組元素只有乙個

實現:private static int partition(int array, int low, int high)

array[low] = pivot;

return low;

}public static void quicksort(int array, int low, int high)

}演算法複雜度分析:

複雜度只要依賴於遞迴樹的高度

平均情況下(即分組均勻,每個分組的元素大概為原陣列的1/2時):遞迴樹高度為o(nlogn)

因為對陣列分組的操作需要o(n),此時複雜度為  o(nlogn)

最壞情況(陣列有序,此時遞迴樹退化為直線):樹高度為o(n), 所以複雜度為o(n^2)

空間複雜度:

(取決於遞迴層數)

同時間複雜度

平均: o(logn)

最壞: o(n)

穩定性:

快速排序為非穩定排序

優化:由於基準值的選取直接關係到分組是否均勻,所以隨機選擇陣列中的乙個數做為pivot,然後將其和第乙個元素交換

這樣隨機後,陣列分組較為均勻

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...

排序 快速排序

定義 在快速排序演算法中,使用了分治策略,將要排序的序列分成兩個子串行,然後遞迴地對子序列進行排序,直到整個序列排序完畢。步驟 1.在序列中選擇乙個關鍵元素作為軸 2.對序列進行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動到軸的後面。在進行劃分之後,軸便在它最終的位置上 3.遞迴地對兩個子...

排序 快速排序

時間複雜度 快速排序每次將待排序陣列分為兩個部分 1 在理想狀況下,每一次都將待排序陣列劃分成等長兩個部分,則需要logn次劃分。2 在最壞情況下,即陣列已經有序或大致有序的情況下,每次劃分只能減少乙個元素,快速排序將不幸退化為氣泡排序,最壞情況為o n 2 快速排序的平均時間複雜度為o nlogn...