码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序(python)

时间:2019-01-12 18:04:36      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:手工   技术   简单   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在线解释器

 

归并排序(python)

标签:手工   技术   简单   www   解释器   img   test   def   mod   

原文地址:https://www.cnblogs.com/bianjing/p/10260264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!