随机化选择算法

算法设计与分析这本书里面提到的随机选择算法,原来的实现是将数组分成三等份,考虑了一下,发现在实现的时候,不是很方便,因此采用的是快排的partition算法。


#!/usr/bin/python

import random

number1=[1,2,3,10,5,6,7,8,9]

def randomselect(number,low,high,k):
	t = random.randint(low,high)
	number[t],number[high] = number[high],number[t];
	ix = partition(number,low,high)
	tt = ix - low + 1;
	if ( tt == k):
		return number[ix]
	elif(tt < k):
		return randomselect(number,ix+1,high,k-tt)
	else: 
		return randomselect(number,low,ix-1,k)
	print x;

def partition(number,start,end):
	i = start;
	for j in range(start,end):
		if(number[j] < number[end]):
			number[i],number[j] = number[j],number[i]
			i += 1
	number[i],number[end] = number[end],number[i]
	return i

print randomselect(number1,0,len(number1)-1,4)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值