这里给出分治语义的一种通用性实现:

def divide_and_conquer(S, divide, combine):if len(S) <= 1: return SL, R = divide(S)A = divide_and_conquer(L, divide, combine)B = divide_and_conquer(R, divide, combine)return combine(A, B)

所以分治的实施,关键问题在于 divide(分) 方法和 combine (合)方法;

对于归并排序,

  • (1)divide:按长度进行二分
  • (2)combine:也即是 merge(L, R),对两个有序数列进行归并;

所以,我们都知道归并排序(mergesort(S))的实现,需要借助 merge(L, R) 这一辅助函数(对两个已排序数列进行合并),merge 函数执行的是合(combine)的动作;快速排序(quicksort)的实现,则需要借助 partition 这一辅助函数,partition 执行的是分(divide)的动作。

归并排序

def merge(L, R):l1, l2 = len(L), len(R)S = []i, j = 0, 0while i < l1 and j < l2:if L[i] < R[j]:S.append(L[i])i += 1else:S.append(R[j])j += 1if i < l1:  S += L[i:]if j < l2:  S += R[j:]return Sdef mergesort(seq):if len(seq) <= 1: return seqm = len(seq)//2L, R = seq[:m], seq[m:]L, R = mergesort(L), mergesort(R)return merge(L, R)

快速排序

def partition(seq):pivot, seq = seq[0], seq[1:]low = [x for x in seq if x <= pivot]high = [x for x in seq if x not in low]return low, pivot, highdef qsort(seq):if len(seq) <= 1: return seqlow, pivot, high = partition(seq)return qsort(low)+[pivot]+qsort(high)

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. 如何在命令行上创建符合特定规范的密码?
  2. 【数据结构】回顾散列表
  3. mysql 显示用户_在Mysql中如何显示所有用户?
  4. python2.7.13环境搭建
  5. 一种新颖的流程控制方式
  6. 通过Java执行python文件
  7. 《现代操作系统(原书第3版)》pdf
  8. DataTable 转 Entity
  9. 软考可以一次报两门吗
  10. 如何设置XMind思维导图线条
  11. MINIGUI交叉编译【转】
  12. 0505.Net基础班第十三天(面向对象多态)
  13. 29.2. Ubuntu
  14. 手机安装W ndows7镜像,Windows7专业版
  15. python里面snip什么意思_文献检索里面SJR是什么,SNIP指标是什么
  16. 解决spacedesk卸载/重装软件时显示 指定的账户已存在
  17. Gos —— 显示器控制
  18. java有一只兔子 从出生_Java解决题目:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子。。。...
  19. linux中无法联网小电脑图标不见,电脑桌面上的网络连接图标突然不见怎么解决?...
  20. 什么明星有计算机等级证,明星CP名也分等级?朱一龙王一博还好,看到胡一天:太有才了...

热门文章

  1. request如何获取请求路径方法
  2. java 项目名命名规范_javaWeb项目命名规范
  3. python distance matrix_Python 矩阵转置的几种方法小结
  4. 谷歌搜索363搜索引擎入口_SEO谷歌搜索引擎优化到底有啥好?
  5. 海思3519A上运行yolov3(二)——Linux和Windows开发环境和运行环境搭建
  6. 基于JavaScript技术完成单击事件完成显示和隐藏
  7. 2017年BackBox5和Ubuntu16.04.1国内更新源
  8. css关键字unset
  9. window 常用软件
  10. java验证码-汉字验证码