python 快速排序的实现

2023-11-14

快速排序

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:

  • 首先设定一个分界值,通过该分界值将数组分成左右两部分。

  • 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。

  • 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

  • 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

代码如下

def quick_sort(origin_items, comp=lambda x, y: x <= y):
    items = origin_items[:]
    _quick_sort(items, 0, len(items) - 1, comp)
    return items


def _quick_sort(items, start, end, comp):
    if start < end:
        pos = _partition(items, start, end, comp)
        _quick_sort(items, start, pos - 1, comp)
        _quick_sort(items, pos + 1, end, comp)

def _partition(items, start, end, comp):
    # 把列表最后一个作为枢轴
    pivot = items[end]
    # i 用来记录交换位置
    i = start - 1
    for j in range(start, end):
        if comp(items[j], pivot):
            i += 1
            items[i], items[j] = items[j], items[i]
    items[i + 1], items[end] = items[end], items[i + 1]
    return i + 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 快速排序的实现 的相关文章

随机推荐

  • Linux下使用QSharedMemory异常退出时共享内存未释放解决办法

    首先看一下QSharedMemory在不同平台下的差异问题 详细描述 QSharedMemory 类提供了对一段共享内存的访问 译注 一段共享内存 在后续译文中也译为 共享内存段 QSharedMemory 提供了被多线程和多进程共享的一段
  • OCaml 安装以及简单的加减乘除Demo(以Ubuntu16.04为例)

    安装nix 参考 https mirrors tuna tsinghua edu cn help nix 安装nix sh lt curl https mirrors tuna tsinghua edu cn nix latest inst
  • 100 个网络基础知识

    1 什么是链接 链接是指两个设备之间的连接 它包括用于一个设备能够与另一个设备通信的电缆类型和协议 2 OSI 参考模型的层次是什么 有 7 个 OSI 层 物理层 数据链路层 网络层 传输层 会话层 表示层和应用层 3 什么是骨干网 骨干
  • c语言从键盘输入一个3*3矩阵,并分别求主对角线和副对角线

    c语言从键盘输入一个3 3矩阵 并分别求主对角线和副对角线 include
  • Java Conversion from String to bytes is not one-one?

    在工作中遇到了标题所述的问题 当一个字节数组编码成字符串后再获得字符串的字节数组 发现会和一开始的字节序列不同 上网查询了一番 发现Stack Overflow上有同样的问题 现在就来分析一下为什么会出现这种情况 byte bytes1 1
  • int与char之间的相互转换(c/c++)

    int 转换为char 0 即可 int a 5 char b a 0 注意 1 这里的b得到的字符型的5 2 由于char只有一个字节的空间 所以int只能是0 9之间的数 char 转换为int 0 即可 char a 5 int b
  • HSV介绍二:HSV颜色识别-HSV基本颜色分量范围

    一般对颜色空间的图像进行有效处理都是在HSV空间进行的 然后对于基本色中对应的HSV分量需要给定一个严格的范围 下面是通过实验计算的模糊范围 准确的范围在网上都没有给出 H 0 180 S 0 255 V 0 255 此处把部分红色归为紫色
  • 服务器电脑的作用,什么是wins服务器及其作用 -电脑资料

    问 什么是 WINS服务器 有什么作用 答 WINS Windows Internet Name Service 服务器主要用于NetBIOS名字服务 它处理的是NetBIOS计算机名 Computer Name 所以也被称为NetBIOS
  • vue3 mitt路由跳转后 on事件获取不到值的奇葩问题解决

    vue3不再支持大家试用this 那原型链这种东西自然是要命了 好在我们还有第三方插件mitt 但这东西是真的坑啊 比如我们定义 EventBus emit 然后马上进行路由跳转 EventBus emit datas Acquis rou
  • 苹果手表测心电的原理

    苹果手表 Apple Watch 测心电的原理是通过一种称为光电容积脉搏波法 photoplethysmography PPG 的技术来实现的 此外 它还使用了一种名为电极传感器的功能来检测心电图 ECG 信号 以下是苹果手表测量心电和心率
  • 加速AndroidStudio的编译和卡顿等待说拜拜!

    Android studio 2 2 当中有一项新的功能 Dex In Process 这项功能可以动态的加快编译速度 以及提高Instant Run 的效率 那么怎么来使用这项新功能呢 你只需要修改 gradle properties 这
  • Android 进程保活招式大全

    https mp weixin qq com s biz MzA3NTYzODYzMg mid 2653577617 idx 1 sn 623256a2ff94641036a6c9eea17baab8
  • Android开发网上的一些重要知识点

    1 android单实例运行方法 我们都知道Android平台没有任务管理器 而内部App维护 者一个Activity history stack来实现窗口显示和销毁 对于常规从快捷方式运行来看都是startActivity可能会使用FLA
  • SonarQube 04 SonarScanner的使用 Web Go项目扫描

    Web前端项目扫描 root jenkins master devops web service master ls build index html Jenkinsfile1 package lock json src config Je
  • Graph-node:创建一个新的subgraph

    Graph node 创建一个新的subgraph 1 合约源码 以TetherToken为例 TetherToken 2 开发子图 作为子图开发人员 您可以定义 The Graph 正在索引哪些区块链数据以及如何存储这些数据 以下是子图定
  • 为什么很多python文件中 都有这句代码if __name__ == ‘__main__‘:

    最近学习python 看到大多数写的好一点的python脚本或者程序中都会有 if name main 这句代码 然后收集了一些资料分享 1 这段代码是干嘛用的 python文件一般有两种使用方法 第一种是直接运行python文件 第二种是
  • 毕业设计基于OpenMV的火灾检测及人员搜寻智能车

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • GPT-4震撼发布:多模态大模型:Plus用户优先试用

    OpenAI 刚刚宣布正式推出 GPT 4 GPT 4 是 Generative Pre trained Transformer 4 的缩写 即生成型预训练变换模型 4 这是 OpenAI 努力扩展深度学习的最新里程碑 GPT 4 是一个大
  • Linux-0.11操作系统实验5-信号量的实现和应用

    实验环境 信号量的实现和应用 实验理论 Linux 0 11操作系统实验5理论 信号量与临界区 实验任务 在 Ubuntu 下编写程序 用信号量解决生产者 消费者问题 在 linux 0 11 中实现信号量 用生产者 消费者程序检验之 用信
  • python 快速排序的实现

    快速排序 快速排序 Quicksort 是对冒泡排序的一种改进 快速排序算法通过多次比较和交换来实现排序 其排序流程如下 首先设定一个分界值 通过该分界值将数组分成左右两部分 将大于或等于分界值的数据集中到数组右边 小于分界值的数据集中到数