【Python】快速排序求第N大的数字

这篇具有很好参考价值的文章主要介绍了【Python】快速排序求第N大的数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

根据快速排序算法,求一个列表中第n大的数字

常规解法

把列表从大到小排序,直接取索引为 n-1 的数字

优化解法

根据快速排序的想法,可以在排序完成之前,就可以找到第n大的数字

def top_n(ls, n):
    pivot = ls[0]
    # left = []
    # middle = []
    # right = []
    # for each in ls:
    #     if each < pivot:
    #         left.append(each)
    #     elif each == pivot:
    #         middle.append(each)
    #     else:
    #         right.append(each)
    left = [each for each in ls if each < pivot]
    middle = [each for each in ls if each == pivot]
    right = [each for each in ls if each > pivot]
    
    if len(right) < n:
        n = n - len(right)
        if len(middle) < n:
            return top_n(left, n - len(middle))
        else:
            return pivot
    else:
        return top_n(right, n)

使用列表表达式,代码短一些,不过多了两层循环,建议使用正常的循环文章来源地址https://www.toymoban.com/news/detail-510951.html

到了这里,关于【Python】快速排序求第N大的数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot——根据需求创建后端接口

     具体返回如下JSON格式数据 含有四个属性列:id 和 username 和photo 和followerCount  首先按照下面文章创建一个模板项目 SpingBoot——SB整合MB的web项目模板_北岭山脚鼠鼠的博客-CSDN博客 使用如下的建表语句在一个数据库中新建一个用户表 并在pojo层中新建一个与之对应的实体类Use

    2024年02月05日
    浏览(73)
  • 排序算法的巅峰之选:学习Python快速排序!

    快速排序(Quick Sort)是一种高效的排序算法,它的基本思想是通过分治的策略将一个大问题分解成小问题并解决。快速排序的核心操作是选取一个基准元素,将待排序序列划分成左右两部分,其中左部分的元素都小于基准元素,右部分的元素都大于基准元素。然后递归地对左

    2024年02月13日
    浏览(56)
  • python实现快速排序算法

    1. 快速排序 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行

    2024年02月06日
    浏览(46)
  • Python算法——快速排序

    快速排序(Quick Sort)是一种高效的分治排序算法,它选择一个基准元素,将数组分成两个子数组,小于基准的放在左边,大于基准的放在右边,然后递归地排序子数组。快速排序通常比冒泡排序和选择排序更高效,特别适用于大型数据集。本文将详细介绍快速排序的工作原理

    2024年02月05日
    浏览(41)
  • 用Python实现快速排序和冒泡排序,代码+详细解析

    1、冒泡排序         冒泡排序:每一次相邻的两个数做比较,大的往后移动一位,每次循环都会把最大的值(升序)或最小的值(降序)放在末端 。 2、快速排序         快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地

    2024年02月11日
    浏览(41)
  • 如何根据需求理解CPU、SoC和MCU的区别

    在当今数字化的世界中,我们经常听到关于CPU、SoC和MCU的名词,它们都是计算机科学和电子工程领域中的重要组成部分。然而,这三者之间存在着明显的区别。本文将深入探讨CPU(中央处理器)、SoC(系统芯片)和MCU(微控制器)的定义、功能和应用领域,以帮助读者更好地

    2024年02月19日
    浏览(43)
  • 用html实现一个静态登陆页面-可根据需求更改样式

    一、创建html文件,vscode下载相关插件 我们先选择一个文件夹创建login.html,.之前的文件命无所谓,.之后就必须为html或者htm。 在编辑改文件输入!且出现提示后按回车或按tab快捷生成基础代码。 然后我们下载一个可以方便我们开发的插件。 搜索之后点击一下然后下载即可。

    2024年02月04日
    浏览(64)
  • 最长回文子串&最长子串&第K大的数字&atoi

    解题思路:中心扩散法 中心扩散法 其实,我们知道,对于回文子串来说,是对称的。也就是说,从中心开始,往左扩散,往右扩散,一直去比较左右两边,如果一样,就再去往左扩散,往后扩散,直到结束,如果出现不相等的情况,那就说明不是回文子串。我们来举个例子

    2023年04月08日
    浏览(92)
  • 盘点数字IC后端实现中clock skew大的各种场景

    文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点。点击进去后出现任何损失与社区无关。 在分享今天的技术主题之前,告诉大家一个好消息。年底了,很多小伙伴们又开始着手换工作了,因此,应各位邀请小编准备开始尝试 IC 前后端招聘相关的业务服务 。简单来

    2024年02月01日
    浏览(63)
  • 根据源码,模拟实现 RabbitMQ - 从需求分析到实现核心类(1)

    目录 一、需求分析 1.1、对 Message Queue 的认识 1.2、消息队列核心概念 1.3、Broker Server 内部关键概念 1.4、Broker Server 核心 API (重点实现) 1.5、交换机类型 Direct 直接交换机 Fanout 扇出交换机 Topic 主题交换机 1.6、持久化 1.7、网络通信 通信流程 远程调用设计思想 1.8、模块设计图

    2024年02月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包