Pyhont笔记 之 快速排序(随机化版本)

使用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]
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页