演算法導論之快速排序

2022-03-17 05:22:23 字數 2075 閱讀 5105

def

partition(a, p, r):

x = a[r] #

錨點 主元

i = p - 1

for j in

range(p, r):

if a[j] <=x:

i += 1a[i], a[j] =a[j], a[i]

a[i+1], a[r] = a[r], a[i+1]

return i + 1

defquicksort(a, p, r):

if p < r: #

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

quicksort(a, p, q-1)

quicksort(a, q+1, r)

view code

import

random

defpartition(a, p, r):

x = a[r] #

錨點 主元

i = p - 1

for j in

range(p, r):

if a[j] <=x:

i += 1a[i], a[j] =a[j], a[i]

a[i+1], a[r] = a[r], a[i+1]

return i + 1

"""partition函式體解析:

1. 將列表, 首元素下標, 尾元素下標傳遞進來

2. 設定基準值為尾元素

3. 遍歷列表, 將列表內的每一項與基準值比較

4. 1. 如果當前元素小於基準值, 用指標記錄下標

2. 如果當前元素大於基準值, 過

3. 如果當前元素小於基準值, 將指標後移一位, 將當前元素與指標現在所指的元素, 交換位置

5. 迴圈結束, 列表遍歷完畢, 當前指標左側的元素都比基準值小, 右側的元素都比基準值大, 將基準值插入到此指標的位置

""""""

迴圈內部兩個指標的解析:

1. 將尾元素設定為基準值

2. i指標預設設定的是j-1, 即: -1

3. j指標是根據迴圈的次數而變化, 從0到尾元素的下標

4. 1. 如果從開始遍歷, 每乙個元素都比基準值小的話, i指標只是記錄了這些元素的位置,

並一直向後移動, i指標走過的位置, 都為小於基準值的元素

2. 接著往後遍歷, 如果j指標指向的元素大於基準值, 直接跳過

3. 接著往後遍歷, 如果j指標指向的元素小於基準值, 停下,

i指標還是停留在上乙個比基準值小的元素的位置, 將i指標後移, i指向第乙個比基準值大的元素, 將這個元素與j指向的元素交換位置

5. 1. 如果j指標指向的元素, 比基準值大, 過, i的值不變

2. 如果j指標指向的元素, 比基準值小, i指標後移一位, 將i指標指向的元素與j指標指向的元素, 交換位置

6. 迴圈結束, 列表已遍歷一遍, i指標左側的元素都比基準值小, 右側的元素都比基準值大, 將基準值插入到i指標位置處

"""def

quicksort(a, p, r):

if p < r: #

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

quicksort(a, p, q-1)

quicksort(a, q+1, r)

"""quicksort()函式體解析

1. 將傳遞進來的列表進行partition()函式分割,

2. 分割為左列表[都比基準值小], 右列表[都比基準值大], 遞迴呼叫自己, 直到被分成n個列表長度為一的小列表

3. 結束第二步, 就代表列表排序完畢

"""if

__name__ == "

__main__":

a = [i for i in range(1, 1000)]

random.shuffle(a)

print("

洗牌之後的列表:

" +str(a))

quicksort(a, 0, len(a)-1)

print("

快排之後的列表:

" + str(a))

view code

演算法導論之快速排序

1 2 author justinzhang3 email uestczhangchao gmail.com4 time 2011年5月11日15 58 405 discription 演算法導論第7章,快速排序演算法實現6 change the previous c to cpp,and usin...

快速排序 演算法導論

對於包含n個數的輸入陣列來說,快速排序是一種最壞情況時間複雜度為o n 的排序演算法。雖然最壞情況時間的複雜度很差,但是快速排序通常是實際排序應用中最好的選擇,因為它的平均效能非常好 它的期望時間複雜度是o nlgn 而且o nlgn 中隱含的常數因子非常小,另外,它還能夠進行原址排序,甚至在虛存環...

演算法導論 快速排序

既然敢叫 快速排序 必然有其過人之處。事實上,它確實是最快的通用內部排序演算法。它由hoare於1962年提出,相對歸併排序來說不僅速度快,並且不需要輔助空間。對於包含n個數的輸入陣列來說,快速排序是一種最壞情況時間複雜度為o n 2 的排序演算法。雖然最壞情況時間複雜度差,但是快速排序通常是實際排...