分治策略 快速排序

2021-05-22 14:56:51 字數 721 閱讀 8797

快速排序演算法是基於分治策略的另乙個排序演算法。其基本思想是:對輸入的子陣列a[p:r],按以下三個步驟進行排序。

(1) 分解(divide):以a[p]為基準元素將a[p:r]劃分成3段a[p:q-1],a[q]和a[q+1:r],使得a[p:q-1]中任何乙個元素小於等於a[q],而a[q+1:r]中任何乙個元素大於等於a[q]。下標q在劃分過程中確定。

(2) 遞迴求解(conquer):通過遞迴呼叫快速排序演算法分別對a[p:q-1]和a[q+1:r]進行排序。

(3) 合併(merge):由於對a[p:q-1]和a[q+1:r]的排序是就地進行,所以在a[p:q-1]和a[q+1:r]都已排好的序後,不需要執行任何計算,a[p:r]就已排好序。

快速排序的執行時間與劃分是否對稱有關,其最壞情況發生在劃分過程產生的兩個區域分別包含n-1個元素和1個元素的時候。t(n) = t(n-1)+0(n) n>1;t(n) = 0(1)   n<=1;

t(n)=o(n2) ;

最好情況下,每次劃分所取的基準都恰好為中值,即每次劃分都產生兩個大小為n/2的區域。

t(n) = o(1)  n<=1; t(n) = 2t(n/2) + o(n)   n>1

t(n) = o(nlogn)。

可證:快排在平均情況下的時間複雜度也是o(nlogn)。

採用隨機策略的快速排序演算法,在快速排序演算法的每一步中,當陣列還沒有被劃分時,可以再a[p;r]中隨機選出乙個元素作為劃分基準.

Nearth 分治策略007 快速排序演算法

快速排序演算法是基於分治策略的另乙個排序演算法。其基本思想是,對於 輸入的子陣列a p r 按以下三個步驟進行排序 1,分解 以a p 為基準元素將a p r 劃分成3段,分別是a p q 1 a q a q 1 r 使a p q 1 中任何乙個元素小於等於a q 而a q 1 r 中任何乙個元素大...

分治策略 典型例項 快速排序演算法

基本思想 被排序陣列為a,用陣列首元素作為標準將a分成前後兩部分,比首元素小的元素構成陣列的前部分,比首元素大的部分構成陣列的後部分。這兩部分構成兩個新的子問題,演算法接著對這兩個陣列進行遞迴。quicksort a,p,r p,r分別為陣列a的首元素和尾元素的下標 輸入 陣列a p.r 1 p r...

分治 快速排序

快速排序陣列元素的思想 1 設k a 0 將k挪到適當位置,使得比k小的元素都在k左邊,比k大的元素都在k右邊,和k相等的,不關心在k左右出現均可 o n 時間完成 2 把k左邊的部分快速排序 3 把k右邊的部分快速排序 class program quicksort a,0,a.length 1 ...