标签:手工 技术 简单 www 解释器 img test def mod
归并排序仍然是利用完全二叉树实现,它是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(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在线解释器
标签:手工 技术 简单 www 解释器 img test def mod
原文地址:https://www.cnblogs.com/bianjing/p/10260264.html