随机选择第k小元素随机快速排序-算法设计与分析实验四
Posted TIME0101
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机选择第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
七、程序运行结果
以上是关于随机选择第k小元素随机快速排序-算法设计与分析实验四的主要内容,如果未能解决你的问题,请参考以下文章