归并排序(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在线解释器

 

转载于:https://www.cnblogs.com/bianjing/p/10260264.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值