使用Python语言实现快速排序算法(随机化版本)
算法的期望运行时间表示为:Θ(nlgn)
(随机化版本)快速排序算法伪算法如下:
本章使用了“使用Python语言实现快速排序算法”中的函数,具体请参考:
使用Python语言实现快速排序算法
'''
randomized_quicksort(A,p,r)
if p<r
q=randomized_partition(A,p,r)
quit_sort(A,p,q-1)
quit_sort(A,q+1,r)
randomized_partition(A,p,r)
i=random(p,r)
A[i],A[r]=A[r],A[i]
return partition(A,p,r)
'''
Python算法:
import random
from quick_sort import *
def randomized_quicksort(A,p,r):
'''
randomized_quicksort用递归法实现对数组进行排序(正序)
A是一个仅包含数值型的列表
p,r是列表A的下标,且满足p<=r'''
if p<r:
q=randomized_partition(A,p,r)
randomized_quicksort(A,p,q-1)
randomized_quicksort(A,q+1,r)
def randomized_partition(A,p,r):
'''
randomized_quicksort为快速排序的关键函数,用来对数组进行原址重拍
randomized_quicksort随机选择数组元素作为主元x,并围绕x把数组划分成4个(可能为空)区域
for循环体内的下标k在每个区域满足以下性质:
1,若p<=k<=i,则A[k]<=x
2,若i+1<=k<=j-1,则A[k]>x
3,若k=r,则A[k]>x
'''
i=random.randint(p,r)
A[i],A[r]=A[r],A[i]
return partition(A,p,r)
运行结果:
a = [9,8,7,5,5,6,13,2,3,12]
print(a)
randomized_quicksort(a,0,len(a)-1)
print(a)
[9, 8, 7, 5, 5, 6, 13, 2, 3, 12]
[2, 3, 5, 5, 6, 7, 8, 9, 12, 13]