經典排序演算法6 快速排序

2021-08-22 11:58:32 字數 887 閱讀 5926

快速排序對給定陣列中的元素 進行重新排列,以得到乙個快速排序的分割槽,在一 個分割槽中,所有在s下標之前的元素都小於等於a[s],所有在s下標之後的元素都大於等於a[s],即a[s]已經位於它在有序陣列中的最終 位置。

1.首先選擇乙個元素為中軸,一般選擇為第乙個元素, a[l]

2.建立分割槽:分別掃瞄與中軸比較,一次從左到右(用i表示)直到遇到第乙個大於中軸的元素,另一次從右到左(用j表示)直到遇到第乙個小於等於中軸的元素

3.兩次掃瞄全部停止會發生3種不同的情況

1)掃瞄指標i,j不相交,即i2)掃瞄指標相交, 即i>j,把中軸和a[j]交換以後,得到該陣列的乙個分割槽

jp全部

全部3)掃瞄指標指向同乙個元素,也就是i=j,被指向的元素一定等於p,建立該陣列的乙個分割槽,**點的 位置s=i=j。

=jp全部

=p全部

合併後兩種情況,只要i

注意:在這種形式下,下標i可能會超過子陣列的邊界

如果所有的**點位於相應子陣列的中點,就是最優情況,鍵值的比較次數:

在最差情況下,所有的**點都趨於極端:兩個子陣列有乙個為空,而另乙個子陣列僅僅被分割槽陣列少一 

個元素,這會在已 排好序的情況下出現,鍵值的比較次數:

因此在平均情況下,僅比最優情況下多執行38%的比較操作,其最內 層迴圈效率非常高,使得在處理隨機排列的陣列時,速度要比合併排序快。

void quicksort(int a,int l,int r)

while(i

i++;

if (i

} a[i]=key;

quicksort(a,l,i-1);

quicksort(a,i+1,r);

} return;

}

《經典排序演算法 快速排序》

快速排序是實踐中已知的最快的排序演算法,平均執行時間o nlogn 該演算法之所以快是因為非常精煉和高度優化的內部迴圈。它也是一種分治的遞迴演算法,將陣列s排序的基本演算法由下列簡單的四步組成 如果s中元素個數是0或1,則返回。取s中任一元素v,稱之為樞紐元。將s 分成兩個不相交的集合s1 x v ...

經典排序演算法 快速排序

使用分割槽演算法並找出主元 對主元兩邊的序列分別進行排序 整體時間複雜度 o nlog n public class quicksort 分割槽演算法 public static intpartition int a,int l,int r else if a l a mid a l a r els...

經典演算法 快速排序

題目說明 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序n 個專案要 n log n 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...