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

2022-05-02 09:48:16 字數 1323 閱讀 7195

1、演算法描述

快速排序也是基於分治模式的,下面是乙個典型子陣列a[p..r]排序的分治過程,主要分為三個步驟:

(1)分解:將陣列a[p..r]劃分成兩個子陣列a[p...q-1]和a[q+1...r],使得前乙個陣列中每個值都小於等於a[q],後乙個陣列每個值都大於a[q],下標q也在這個分解過程中求得。

(2)解決:通過遞迴呼叫對兩個子陣列分別進行排序。

(3)合併:兩個子陣列是就地進行排序的,所以他們的合併並不需要操作,這個陣列已經有序了。。

2、具體實現:

形參和實參的區別:

(1)實現一:

view code

1 #include2

int partition(int *ptr,int p,int r)//

一次劃分過程316

}17 i++;

18 temp=*(ptr+i-1

);19 *(ptr+i-1)=*(ptr+r-1

);20 *(ptr+r-1)=temp;

21return

(i);22}

23void quicksort(int *ptr,int p,int r)//

遞迴排序

2432}33

void

main()34;

36 quicksort(a,1,8

);37

for(int i=0;i<8;i++)

38 printf("

%d

",a[i]);

39 }

(2)實現二:

view code

1 #include2

int partition(int ptr,int p,int r)//

一次劃分過程316

}17 i++;

18 temp=ptr[i-1

];19 ptr[i-1]=ptr[r-1

];20 ptr[r-1]=temp;

21return

(i);22}

23void quicksort(int ptr,int p,int r)//

遞迴排序

2432}33

void

main()34;

36 quicksort(a,1,8

);37

for(int i=0;i<8;i++)

38 printf("

%d

",a[i]);

39 }

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

一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,排序最快,也只能達到o nlgn 二 快速排序演算法的描述 ...

《演算法導論》筆記 第7章 快速排序

第7章 快速排序 像合併排序一樣,快速排序也是基於分治模式的。下面對乙個典型的子陣列a p r 排序的分治過程的三個步驟 分解 陣列a p r 被劃分成兩個 可能空 的子陣列a p q 1 和a q 1 r 使得a p q 1 中的每個元素都小於等於a q a q 1 r 中的每個元素都大於等於a ...

《演算法導論》筆記 第7章 7 4快速排序分析

利用randomized partition,快速排序演算法期望的執行時間當元素值不同時,為o nlgn 7.4 1 證明 在遞迴式 中,t n n 2 採用代換法。猜測 t n c n 2,c為某個常數。選擇足夠大的c,使得 c 2 n 1 可以支配 n t n c n 2成立。7.4 2 證明 ...