主要分為兩個子演算法,partition(a, p, r)以a[r]為基準對陣列進行乙個劃分,比a[r]小的放在左邊,比a[r]大的放在右邊。quicksort(a, p, r)是快速排序的子程式,呼叫劃分程式對陣列進行劃分,然後遞迴地呼叫quicksort(a, p, r),以完成快速排序的過程。快速排序的最差時間複雜度為o(n2),平時時間複雜度為o(nlgn)。最差時間複雜度的情況為陣列基本有序的時候,平均時間複雜度為陣列的數值分布較為平均的時候。在平時情況下快速排序跟堆排序的時間複雜度都為o(nlgn),但是快速排序的常數項較小,所以要優於堆排序。
partition(a, p, r)
x ← a[r]i ← p - 1
for j ← p to r - 1
doif
a[j] ≤ x
then i ← i + 1
swap(a[i], a[j])
swap(a[i + 1
], a[r])
return i + 1
quicksort(a, p, r)
if p then q ← partition(a, p, r)quicksort(a, p, q - 1)
quicksort(a, q + 1, r)
實現:
#!/usr/bin/python
import
sysdef
partion(array, p, r):
x =array[r]
i = p - 1
for j in
range(p, r):
if (array[j] i+=1array[j], array[i] =array[i], array[j]
i+=1array[i], array[r] =array[r], array[i]
return
idef
quick_sort(array, p, r):
if p q =partion(array, p, r)
quick_sort(array, p, q - 1)
quick_sort(array, q + 1, r)
if__name__ == "
__main__":
array = [1, 3, 5, 23, 64, 7, 23, 6, 34, 98, 100, 9]
quick_sort(array, 0, len(array) - 1)
for a in
array:
sys.stdout.write(
"%d
" % a)
排序演算法 快速排序Python實現
coding utf 8 file quick sort.py author zhang san time 2020 7 17 18 25 des 快速排序 每次選擇乙個pivot,然後以這個pivot為中心,兩邊分別存放比其大或者小的值,依次 迭代進行劃分,最終完成排序 這裡一定要注意指標滑動的方...
Python實現快速排序演算法
快速排序 quicksort 1 演算法思想 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 1 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相似的子問...
快速排序演算法(Python實現)
在網上看了很多關於快速排序的思路和 實現,自己總結了一下 步驟 一 從一組序列中選擇乙個基準數,把比這個數大的放在一邊,比這個數小的放到另一邊 中比基準數大的放到右邊,比基準數小的放到左邊 二 基於基準數進行分割槽,對左右兩邊進行步驟1的操作,直至各區只有乙個數 步驟一詳細思路 假設有一組序列ali...