算法题/寻找第K大数

python3

在N个乱序数字中查找第k大的数字 (最简单的想法,后续改进)
采用快速排序法对输入的数据进行排序,然后输出第k大个数

快速排序法思路:
设置a[0]为基准数
定义一个存放小于基准数的列表low
定义一个存放大于基准书的列表high
定义一个存放基准数的列表median
将数组a中小于基准数的数据放入low,大于基准数的数据放入high,基准数放于median
递归

#coding:utf-8
def quickSort(a):
    low = []
    high = []
    median = []
    if len(a) <= 1:
        return a
    else:
        #设置一个基准
        baseline = a[0]
        for i in a:
            if i < baseline:
                low.append(i)
            elif i > baseline:
                high.append(i)
            else:
                median.append(i)
        low_arr = quickSort(low)
        high_arr = quickSort(high)
        arr = low_arr+median+high_arr
        return arr

a = input()   
data  = [int(x) for x in a.split()]
#将最后一个k值弹出
k = data.pop()
print(quickSort(data)[-k])

输入例如

13 -27 26 8 -15 4 2,其中2为要求的第二大的数
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值