日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法导论学习笔记 第7章 快速排序

發布時間:2024/9/16 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法导论学习笔记 第7章 快速排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于包含n個數的輸入數組來說,快速排序是一種時間復雜度為O(n^2)的排序算法。雖然最環情況的復雜度高,但是快速排序通常是實際應用排序中最好的選擇,因為快排的平均性能非常好:它的期望復雜度是O(nlgn),而且O(nlgn)中的常數因子非常小。另外,快速排序還可以實現原址排序,甚至在虛擬環境中也能很好的工作。

1 快速排序的描述

與歸并排序一樣,快速排序也使用了分治法的思想,下面是對一個典型的子數組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[q]。q也是劃分過程的一部分。

解決:通過遞歸調用快速排序,對子數組A[p.. q-1]和A[q+1.. r]進行排序

合并:因為子數組都是原址排序的,所以不需要合并,數組A[p.. r]已經排序。

下面是快速排序的為代碼:

QUICKSORT(A, p, r) 1 if p<r 2 q = PARTITION(A, p, r) 3 QUICKSORT(A, p, q-1) 4 QUICKSORT(A, q+1, r)為了排序一個數組A的全部元素,初始調用QUICKSORT(A, 1, A.length)。

2 數組的劃分

算法的關鍵部分是PARTION過程,他實現了對子數組A[p.. r]的原址排序。PARTION的偽代碼表示如下:

PARTION(A, p, r) 1 x = A[r] 2 i = p - 1 3 for j=p to r-1 4 if A[u]<=x 5 i = i +1 6 exchange A[i] with A[j] 7 exchange A[i+1] with A[r] 8 return i + 1 下圖表示了PARTION如何在一個包含8個元素的數組上進行操作的過程。PRATION總是選擇一個x=A[r]作為主元(pivot element),并圍繞它來劃分數組A[p.. r] 。


PRTION在子數組A[p.. r]上的實際復雜度是O(n),其中n = r - p +1。

3 快速排素的性能

快速排序的運行時間依賴于劃分是否平衡,而平衡與否又依賴于劃分的元素。如果劃分是平衡的,那么快速排序算法性能與歸并排序一樣,如果劃分是不平衡的,那么快速排序的性能就接近與插入排序了,下面給出了快速排序性能的非形式化的分形:

最壞情況的劃分:

? 當劃分產生的兩個子問題分別包含了n-1個元素和0個元素是,快速排序的最壞情況發生了。不妨假設算法的每一次遞歸調用都出現了這種不平衡的劃分。劃分操作的時間復雜度是O(n)。由于對一個大小為0的數組遞歸調用誰直接返回,因此,T(0)=O(1),于是算法運行時間的遞歸式可以表示為:

T(n) = T(n-1) + T(0) + O(n) = T(n-1) + O(n)

? 利用帶入法可以直接得到遞歸式的解為T(n) = O(n^2)。因此,如果在算法的每一層遞歸上,劃分都是最大程度不平衡,那么算法的時間復雜度為O(n^2)。

最好情況的劃分

? 在可能的最平衡的劃分中,PARTION得到的兩個字問題的規模都不大于n/2。這是因為一個子問題的規是n/2,而另一個字問題的規模為n/2 - 1。此種情況下,快速排序的性能非常好。此時,算法的運行時間的遞歸式為:

T(n) = T(n/2) ?+ O(n)

由主定理可知,上述遞歸式的解為O(nlgn)。

平衡的劃分

快速排序的平均運行時間更接近于其最好情況,而非最壞情況。假設的算法總是產生9:1的劃分,乍一看,這種劃分是很不平衡的。這時候得到的快速排序的時間復雜度的遞歸為:

T(n) = T(9n/10) + T(n/10) + cn

書中采用了遞歸樹的方式求出了上述遞歸的解為O(nlgn)。而且指出,只要劃分是常數比例的,算法的運行時間總是O(nlgn)。

總結

以上是生活随笔為你收集整理的算法导论学习笔记 第7章 快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。