随机选择第k小元素、随机快速排序-算法设计与分析实验四

1问题

随机选择第k小元素、随机快速排序

2问题分析

对基准元素的选择的操作进行随机性,使用舍伍德算法可以大概率提高获得平均计算性能

3问题建模

输入需要排序的数列,随机选择基准元素

4算法描述

舍伍德型概率算法在一次划分之前,根据随机数在待划分序列中随机确定一个记录作为轴值,并把它与第一个记录交换,则一次划分后得到期望均衡的两个子序列,从而使算法的行为不受待排列序列的不同输入实例影响,使快速排序在最坏的情况下的时间性能趋近于平均情况的时间性能。

5算法源码

import random
def random_quicksort(a,left,right):
    if(left<right):
        mid = random_partition(a,left,right)
        random_quicksort(a,left,mid-1)
        random_quicksort(a,mid+1,right)


def random_partition(a,left,right):
    t = random.randint(left,right)     #生成[left,right]之间的一个随机数
    a[t],a[right] = a[right],a[t]
    x = a[right]
    i = left-1                         #初始i指向一个空,保证0到i都小于等于 x
    for j in range(left,right):        #j用来寻找比x小的,找到就和i+1交换,保证i之前的都小于等于x
        if(a[j]<=x):
            i = i+1
            a[i],a[j] = a[j],a[i]
    a[i+1],a[right] = a[right],a[i+1]  #0到i 都小于等于x ,所以x的最终位置就是i+1
    return i+1

while(True):
    try:
        s = input("输入待排序数组:\n")             #待排数组
        l =s.split()
        a = [int(t) for t in l]
        random_quicksort(a,0,len(a)-1)
        print ("排序后:")
        for item in a:
            print(item,end=' ')
        print("\n")
    except:
        break

六、测试数据
13 21 9 2 4 45 32
七、程序运行结果
在这里插入图片描述

更多大学课业实验实训
可关注公众号:Time木
回复相关关键词
学艺不精,若有错误还望指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Time木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值