#!/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...