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

2022-04-29 15:57:10 字數 1020 閱讀 4200

1. 快速排序描述:

基於分治模式,分為分解、解決和合併三部分;

1)分解:

將陣列a[p..r]劃分為兩個子陣列a[p..q-1]和a[q+1..r],是的a[p..q-1]中每個元素都小於或等於a(q)

2)解決:

通過遞迴呼叫快速排序,對子陣列a[p..q-1]和a[q+1..r]排序

3)合併:

合併兩個有序的陣列,a[p..r]

1 #include 2 #include 3

4#define maxsize 856

int partition(int a, int p, int

r)劃分陣列,因為最後乙個元素是主元,所以j < (r - 1 )

13for(j = p; j < r; j++)22}

23//

將主元置於小於和大於兩部分之間

24 tmp = a[i + 1

];25 a[i + 1] =a[r];

26 a[r] =tmp;

2728

return (i + 1

);29}30

31void quicksort(int a, int p, int

r)39}40

41int

main();

43int

i;44

45 printf("

a...\n");

46for(i = 0; i < maxsize; i++)

4950 quicksort(a, 0, (maxsize - 1

));51

52 printf("

\nsorted a...\n");

53for(i = 0; i < maxsize; i++)

56 printf("\n"

);57

58 system("

pause");

59return0;

60 }

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

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

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

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

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

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