演算法 排序 python 實現 快速排序

2022-03-14 12:18:03 字數 1328 閱讀 4129

主要分為兩個子演算法,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...