演算法導論第七章快速排序學習總結

2021-10-07 19:50:21 字數 2177 閱讀 4563

快速排序是一種最壞情況下時間複雜度為o(n^2)的排序演算法,雖然最壞情況下效能較差,但快速排序通常是實際排序應用中的最好的選擇,因為它的平均效能非常好,其期望時間複雜度為o(nlgn),且o(nlgn)中隱含的常數因子非常小,且能夠進行原址排序,在虛存環境中也能很好地工作,快速排序是一種不穩定的排序演算法。

快速排序採用的思想和合併排序是一樣的,即分治法。快速排序的分治思想表現為:

1、首先從待排序的數中選擇乙個作為基數,基數的選擇對於排序的效能有很大的影響,也是快排改進的關鍵所在。

2、分治,將比基數小的數放在左邊,比基數大的數放在右邊。

3、對分出來的兩個分割槽分別執行上一步,直到區間只有乙個數為止。

快速排序的**實現如下:

#!/usr/bin/env python

# _*_ coding:utf-8 _*_

defpartition

(a,p,r)

: x = a[r]

# 基數

i = p -

1for j in

range

(p,r)

:if a[j]

<= x:

i +=

1 a[i]

,a[j]

= a[j]

,a[i]

a[i+1]

,a[r]

= a[r]

,a[i+1]

return i +

1def

quicksort

(a,p,r)

:if p < r:

#分治 q = partition(a,p,r)

quicksort(a,p,q-1)

quicksort(a,q+

1,r)

if __name__ ==

"__main__"

: a =[2

,8,7

,1,3

,5,6

,4] quicksort(a,0,

len(a)-1

)print

(a)

在分析快速排序的平均情況效能時,前提假設輸入資料的所有排列都是等概率的,但在實際工程中這個假設並不會總是成立,因此通過在演算法中引入隨機性,使得演算法對於所有的輸入都能獲得較好的期望效能。隨機化的快速排序採用一種稱為隨機抽樣的隨機化技術,即隨機選擇元素作為基數從而進行資料的劃分。

隨機快速排序**實現如下:

#!/usr/bin/env python

# _*_ coding:utf-8 _*_

import random

defpartition

(a,p,r)

: x = a[r]

# 基數

i = p -

1for j in

range

(p,r)

:if a[j]

<= x:

i +=

1 a[i]

,a[j]

= a[j]

,a[i]

a[i+1]

,a[r]

= a[r]

,a[i+1]

return i +

1def

random_partition

(a,p,r)

: i = random.randint(p,r)

#隨機的變化

a[i]

,a[r]

= a[r]

,a[i]

return partition(a,p,r)

defrandom_quicksort

(a,p,r)

:if p < r:

#分治 q = random_partition(a,p,r)

random_quicksort(a,p,q-1)

random_quicksort(a,q+

1,r)

if __name__ ==

"__main__"

: a =[2

,8,7

,1,3

,5,6

,4] random_quicksort(a,0,

len(a)-1

)print

(a)

學習《演算法導論》第七章 快速排序 總結

快速排序通常是用於排序的最佳選擇,這是因為它的平均效能非常好,期望的執行時間為o nlg n 且常數因子很小.另外,它還能夠進行就地排序.它的最壞執行時間為o n 2 快速排序和合併排序一樣,也採用了分治的思想.分治,之前學過,有三個步驟 分解,解決,合併.下面對a p.r 講述快速排序的思想 分解...

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

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

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

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