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

该博客介绍了如何使用Python语言实现随机化版本的快速排序算法。算法通过随机选取主元来提高效率,期望运行时间为Θ(nlgn)。文中提供了详细的伪代码以及实际的Python代码实现,并展示了对一个示例数组进行排序的运行结果。
摘要由CSDN通过智能技术生成

使用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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值