演算法導論第七章例題 快速排序

2021-08-27 01:29:22 字數 624 閱讀 9124

快速排序的平均意義上的時間複雜度是nlgn,最差意義上的時間複雜度是n*n,演算法的好壞取決於所選取的用於劃分陣列的元素的大小。

演算法的思路是:將陣列按照某個元素劃分為兩個部分,並單獨對這兩個部分陣列進行就地排序,就地排序時重複利用劃分的方法將陣列分為更小的兩部分。

本**中為了使**具有平均意義上的時間複雜度,新增了randomizedpartition函式進行優化,該函式的思路是隨機選取介於p和r之間的元素和

r元素互換,然後再按照a[r]進行劃分陣列。

//quick_sort

//time complexity is nlgn

//the way is find an element,and partition the array according to this element

#includeusing namespace std;

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

{ int num=a[r];

int i=p-1;

int j,temp;

//partition the array according to num

for(j=p;j<=r-1;j++)

{ if(a[j]

演算法導論 第七章《快速排序》

本章介紹了快速排序及其演算法分析,快速排序採用的是分治演算法思想,對包含n個數的輸入陣列,最壞情況下執行時間為 n 2 但是平均效能相當好,期望的執行時間為 nlgn 另外快速排序能夠就地排序 我理解是不需要引入額外的輔助空間,每次劃分能確定乙個元素的具體位置 在虛擬環境中能很好的工作。快速排序演算...

演算法導論 第七章 快速排序

快速排序通常是實際應用中最好的選擇,因為它的平均效能非常好,它的期望時間複雜度為o nlng 而且隱含的常數因子非常小。另外,它還是原址排序。quicksort a,p,r if p隨著程式的執行,陣列被劃分為4個 小於主元,大於主元,未劃分,主元,可能有空的 區域。對於partition中的第3 ...

演算法導論第七章快速排序

一 快速排序概述 關於快速排序,我之前寫過兩篇文章,一篇是寫vc庫中的快排函式,另一篇是寫了快排的三種實現方法。現在再一次看演算法導論,發現對快速排序又有了些新的認識,總結如下 1 快速排序最壞情況下的時間複雜度為o n 2 雖然最壞情況下效能較差,但快排在實際應用中是最佳選擇。原因在於 其平均效能...