最小K个数--python

#输入n个整数,找出其中最小的k个数
#思路1:冒泡排序:相邻这个数两两比较,按从小到大顺序交换
def findMin_k(arr,k):
	length = len(arr)
	for i in range(k):
		for j in range(i+1,length):
			if arr[i]>arr[j]:
				arr[i],arr[j] = arr[j],arr[i]
	return arr[0:k]

#思路2:基于快排的思路--指定一个key,在partition函数中完成一轮的比较结果是比key大的都排到其右边,比key小的都排到左边,完成该轮后返回left=right时left的值
def partiiton(arr,left,right):
	key = arr[left]
	while left<right:
		while left < right and arr[right]>=key:
			right-=1
		arr[left] = arr[right]
		while left<right and arr[left] <= key:
			left +=1
		arr[right] = arr[left]
	arr[right] = key

#之后判断left的值比key大还是比key小
# 若left的值比key大,说明在上次partition之后,arr中前left个小的数在左边,其余数在右边,需要缩小范围,下次只需要在数组前left个数中找
#若left的值比key小,说明在上次partition之后,前left个数找的太少了,需要在往数组后面找
def findMin_k2(arr,k):
	length = len(arr)
	left = 0
	right = length-1
	index = partiiton(arr,left,right)
	while k != index:
		if index > k-1:
			right = index-1
		else:
			left = index+1
		index = partiiton(arr,left,right)
	return arr[0:k]


#思路3:可以创建大小为k的容器,用来存储k个数字,接着从输入的数组中读入一个数字,若容器中的数字少于k
#则放入;若容器已满,则拿容器中的最大值来于此数字比较,若小于则替换,否则丢弃此数字
lists = [1, 1, 6, 4, 11, 9, 2, 10, 3]

def findMin_k3(list, k):
    # 创建大小为k的数组
    a = []
    for i in range(len(list)):
        if len(a) < k:
            a.append(list[i])
        else:
            if max(a) > list[i]:
                a[a.index(max(a))] = list[i]
    return a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值