排序——归并排序

上文的 Python 实现还是稍显啰嗦,未能充分发挥 Python 语言的优势,以及“Python——一种可执行的伪代码”的论断。本文介绍一种更为简洁的归并排序的实现:

def mergesort(l):m = len(l)//2lft, rgt = l[:m], l[m:]if len(lft) > 1: lft = mergesort(lft)if len(rgt) > 1: rgt = mergesort(rgt)res = []while lft and rgt:res.append(lft.pop()) if lft[-1] > rgt[-1] else res.append(rgt.pop())res.reverse()return (lft or rgt) + res

简单的 if else 双分支都是可以转换为更为简洁的三目运算符的

while lft and rgt:res.append(lft.pop()) if lft[-1] > rgt[-1] else res.append(rgt.pop())

即是对如下代码的转换:

while lft and rgt:if lft[-1] > rgt[-1]:res.append(lft.pop())# 无参的 pop() ,从尾部弹出元素else:res.append(rgt.pop())

更多 Python 三目运算符的用法,请见 Python中的三目运算符

Python 数据结构与算法——归并排序相关推荐

  1. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  2. python 数据结构与算法——排序

    文章目录 排序的分类 排序的复杂度 python 实现 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快排 树排序 线性时间排序算法 计数排序 桶排序 桶排序的复杂度分析 基数排序 排序的 ...

  3. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  4. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  5. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料

    for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...

  6. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  7. Python数据结构与算法(一)列表和元组

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  8. Python 数据结构与算法——快排

    Python 数据结构与算法--选取算法(TopK) 如果说快速选取法所代表的是剪枝式的遍历操作--在递归树中找出一条通往第 k<script type="math/tex" ...

  9. Python 数据结构与算法——从二分图到寻找最大排列(Maximum Permutation)

    假设现在有 8 位有着特殊癖好的人去买票看电影,其中有一部分人得到了自己喜欢的座位,但大多数人并不满意.现在的问题是,如果这些人各自都有自己喜欢的座位(喜欢的座位有重叠,这是进行最大排列的前提,否则无 ...

最新文章

  1. python ssh2 库 远程登录 执行命令 文件获取
  2. js中对日期进行加减
  3. python列表可以删除和修改吗_Python列表常见操作详解(获取,增加,删除,修改,排序等)...
  4. vue-cli3中安装lib-flexible和px2rem
  5. linux基本知识学习
  6. Stamp Rally
  7. 上传文件到阿里云OSS报错-Unable to execute HTTP request: You have no right to access this object because of buc
  8. Luogu3825[NOI2017] 游戏
  9. C# abstract ,virtual ,override,new --比较好的文章
  10. nod32升级问题解决(20080530)
  11. 博主力推!!NRF52832 BLE 抓包sniffer来了!附带安装使用说明
  12. 网页加速之Link prefetching
  13. 算法:买卖股票最佳时机(c++)
  14. activiti 获取审批人员_Activiti审批汇总流程
  15. SQL中日期函数计算月初/月底/季末/年初/年底
  16. CSDN 博客被自己误删了怎么办---(联系QQ客服)
  17. 基于JAVA的个人博客论坛系统的设计与实现参考【数据库设计、源码、开题报告】
  18. SpringBoot之从零搭建博客网站
  19. IOS (不越狱)网络抓包
  20. 【数组】深析 “数组名称”

热门文章

  1. SparkMapReduce的区别、多线程多进程的区别
  2. ssh - 安全外壳协议的详解,为什么使用它
  3. Android4清理代码缓存,Android清除应用缓存的两种方法
  4. java 传xml js_JavaScript实现的XML与JSON互转功能详解
  5. vue查询列表中所有用户信息_vue实现全匹配搜索列表内容
  6. python对比两组字符串差异_python – 比较两个不同文件中的字符串的脚本
  7. python selenium在编写过程中遇到的问题记录2
  8. 剑指offer面试题58 - I. 翻转单词顺序(双指针)
  9. [转载]firefox一鸣惊人 逼迫微软重新考虑IE战略
  10. ad19 导出step 没有pcb_PCB设计导出Gerber基本操作及注意事项(三)