算法導論讀書筆記(7)快速排序

第二部分 排序和順序統計量

第7章 快速排序

  • 快速排序最壞情況的時間複雜度爲Θ(n²)
  • 但是快速排序是實際排序應用中最好的選擇,因爲它的平均性能非常好:它的期望時間複雜度是Θ(nlgn),而且Θ(nlgn)中隱含的常數因子非常小
  • 原址排序

1. 快速排序的描述

與歸併排序一樣,也使用了分治思想這裏寫圖片描述

Quick-sort(A, p, r)
    if p < r
        q = Partition(A, p, r)
        Quick-sort(A, p, q-1)
        Quick-sort(A, q+1, r)
算法的關鍵部分是Partition過程,它實現了對子數組A[p..r]的原址重排。
Partition總是選擇一個x=A[r]作爲主元,並圍繞它來劃分子數組A[p..r]。隨着程序的執行,數組被劃分成4個區域。

Partition(A, p, r)
    x = A[r]
    i = p - 1
    for j = p to r - 1
        if A[j] <= x
            i = i + 1
            exchange A[i] width A[j]
    exchange A[i+1] with A[r]
    return i + 1

2. 快速排序的性能

快速排序的運行時間依賴於劃分是否平衡,而平衡與否又依賴於用於劃分的元素。劃分平衡與歸併排序性能一樣,否則,其性能接近於插入排序

  • 最壞情況劃分,時間複雜度爲Θ(n²)
  • 最好情況劃分,時間複雜度爲Θ(nlgn)

快速排序的平均運行時間更接近於其最好情況,而非最壞情況。

3. 快速排序的隨機化版本

隨機從子數組A[p..r]中隨機選擇一個元素作爲主元。爲達到這一目的,首先將A[r]與從A[p..r]中隨機選出的一個元素交換。

Randomized-Partition(A, p, r)
    i = Random(p, r)
    exchange A[r] with A[i]
    return Partition(A, p, r)
Randomized-Quick-sort(A, p, r)
    if p < r
        q = Randomized-Partition(A, p, r)
        Randomized-Quick-sort(A, p, q-1)
        Randomized-Quick-sort(A, q+1, r)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章