python---的topk算法

#! conding:utf-8

author = “hotpot”
date = “2017/10/26 9:42”

def quick_index(array, start, end):
    left, right = start, end
    key = array[left]
    while left < right:
        while left < right and array[right] > key:
            right -= 1
        array[left] = array[right]
        while left < right and array[left] < key:
            left += 1
        array[right] = array[left]

    array[left] = key
    return left


def min_num(array, m):
    start, end = 0, len(array) - 1
    index = quick_index(array, start, end)
    while index != m:
        if index < m:
            index = quick_index(array, index+1, end)
        else:
            index = quick_index(array, start, index)

    print(array[:m])

if __name__ == '__main__':
    alist = [15,54, 26, 93, 17, 77, 31, 44, 55, 20]

    min_num(alist,  5)
Python中,topk是一种常见的算法,用于从一个列表或数组中找出前k个最大或最小的元素。引用\[1\]中的代码展示了一个对province_room_quality_data对象进行TopK排序的算法。该算法使用了堆排序的思想,通过维护一个大小为k的最小堆来实现。首先,将前k个元素构建成一个最小堆。然后,遍历剩余的元素,如果当前元素的quality大于堆顶元素的quality,则将堆顶元素弹出,将当前元素插入堆中。最后,将堆中的元素转换为列表并返回。这样就得到了前k个quality最大的province_room_quality_data对象。引用\[2\]中的代码展示了另一种选择算法,用于从一个序列中选择第k小的元素。该算法使用了快速排序的思想,通过递归地将序列划分为小于主元的部分和大于主元的部分,直到找到第k小的元素。引用\[3\]中的代码展示了使用堆排序和冒泡排序两种算法对一个包含100000个元素的列表进行topk操作的执行时间对比。结果显示,堆排序算法的执行时间为0.005194902420043945秒,而冒泡排序算法的执行时间为0.9621851444244385秒。因此,可以看出堆排序算法在处理大规模数据时具有更高的效率。 #### 引用[.reference_title] - *1* [python 实现 topk算法](https://blog.csdn.net/qq_42604176/article/details/122653275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python TopK算法](https://blog.csdn.net/xingtianyao/article/details/101053321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python-排序算法(四)、堆排序之topk问题](https://blog.csdn.net/adminwg/article/details/126816340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值