快速排序的實現(python)

2021-07-25 10:12:40 字數 1543 閱讀 5286

#!/usr/bin/env python3

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

import random

#快速排序基礎

defpartition

(a, p, r):

x = a[r]

i = p - 1;

j = p

while(j < r):

if (a[j] < x):

i += 1

temp = a[i]

a[i] = a[j]

a[j] = temp

j += 1

i += 1

temp = a[i]

a[i] = a[r]

a[r] = temp

return i

defrandomized_partition

(a, p, r):

i = random.randint(p, r)

temp = a[i]

a[i] = a[r]

a[r] = temp

return partition(a, p, r)

#使用兩個遞迴的版本

defquicksort

(a, p, r):

if (p < r):

q = randomized_partition(a, p, r)

#寫**時這步碰到乙個坑,沒有寫成q-1,則會進入乙個死迴圈,因為每次返回的q都會是自己傳入的q

quicksort(a, p, q-1)

quicksort(a, q+1, r)

#使用尾遞迴版本這種棧深度最壞情況o(n)

deftail_recursive_quicksort

(a, p, r):

while(p < r):

q = randomized_partition(a, p, r)

tail_recursive_quicksort(a, p, q-1)

p = q + 1

#這種情況每次將元素少的進行遞迴,元素多的進行迴圈,則最壞情況棧深度能為o(lgn)

deftail_recursive_quicksort_optimize

(a, p, r):

while(p < r):

q = randomized_partition(a, p, r)

if ((q-p) < (r-q)):

tail_recursive_quicksort_optimize(a, p, q-1)

p = q + 1

else:

tail_recursive_quicksort_optimize(a, q+1, r)

r = q - 1

if __name__ == '__main__':

a = [5, 4, 6, 9, 12, 35, 34, 32, 11, 23, 21, 14, 3, 8]

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

print(a)

快速排序的python實現

執行過程中,i 之前 含 的元素都比 a r 小,之後的比 a r 大。即 p i 的元素比 a r 小,其後a i 1 a j 1 的元素比a r 大。最後,交換a i 1 與a r def quicksort a,p,r if p r q partition a,p,r quicksort a,...

python 快速排序的實現

快速排序 quicksort 是對氣泡排序的一種改進。快速排序演算法通過多次比較和交換來實現排序,其排序流程如下 def quick sort origin items,comp lambda x,y x y items origin items quick sort items,0,len ite...

快速排序的Python實現

任意選乙個資料作為基準資料,然後將所有比它小的數都放到它的左邊,所有比它大的數都放到它的右邊 這裡以乙個列表作為例子 45,34,12,56,87,77,47,23 首先選擇45為基準資料 比45小的有 34,12,23 比45大的有 87,77,47,56 所以第一次排序就是 34,12,23,4...