归并排序(python)
Posted 本名边境
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序(python)相关的知识,希望对你有一定的参考价值。
归并排序思想
归并排序仍然是利用完全二叉树实现,它是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列。
基本过程:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列,再两两归并,最终得到一个长度为n的有序序列为止,这称为2路归并排序。
图解:
这个图非网络复制 完全博主根据代码执行顺序手工绘制。
代码:
# -*- coding:utf-8 -*- # 归并 l = [1, 5, 8, 1, 2, 4, 5] # 1.递归拆分 # 2.分组排序 # 3.重组排序 def merge(left, right): result = [] i = j = 0 while len(left) > i and len(right)>j: if left[i] > right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result.extend(left[i:]) result.extend(right[j:]) return result def merge_sort(l): if len(l) <= 1: return l moddle = len(l)/2 left = merge_sort(l[0: moddle]) right = merge_sort(l[moddle: len(l)]) print \'left:\', left, \'right:\', right return merge(left, right) if __name__ == \'__main__\': a = merge_sort(l) print a # def test(n): # print \'第一个n: %s\' % n # if n > 4: # return # test(n + 1) # print \'第二个n: %s\' % n # test(1)
输出结果:
备注:如果不理解递归 先从递归入手,递归理解之后其余的就简单了,
另外推荐一个很好用的分步骤在线解释器:http://www.pythontutor.com/ 完美的python在线解释器
以上是关于归并排序(python)的主要内容,如果未能解决你的问题,请参考以下文章