归并排序Python实现--《数据结构》(C语言版)严蔚敏

归并排序
  “归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。假设初始序列有n个有序的子序列,每个序列的长度为1,然后两两归并,得到 n2 n 2 个长度为2或1的有序子序列,再两两归并…,如此重复,直到得到一个长度为n的有序序列为止。
  归并排序的时间复杂度在 O(nlogn) O ( n l o g n ) 。我们下面直接给个直观的例子看看他是怎么操作的,2-路归并排序:


   下面我们给出他的Python代码(Python3.6)实现:

# -*- coding: utf-8 -*-

def merge(a, b):
    # 此函数用来归并a,b;通过比较a与b元素的大小,将a,b合并成一个List
    len_a = len(a)
    len_b = len(b)
    i, j = 0, 0
    result = [] # result用来存储a,b合并后的结果,按升序
    while i < len_a and j < len_b:
        if a[i] < b[j]:
            result.append(a[i])
            i += 1
        else:
            result.append(b[j])
            j += 1

    if i == len_a: #如果i与a的长度相等,说明a中全部元素已进入result,此时只要将b中剩余元素进入result即可
        for k in b[j:]:
            result.append(k)
    else:# 将a中剩余元素进入result
        for k in a[i:]:
            result.append(k)
    return result


def merge_sort(alist):
    # 将alist一分为2后,再递归地一分为2,然后再用merge函数两两归并
    len_alist = len(alist)
    if len_alist <= 1:
        return alist
    else:
        m = int(len_alist/2)
        left = merge_sort(alist[:m])
        right = merge_sort(alist[m:])
    return merge(left, right)


if __name__ == '__main__':
    a = [4, 7, 8, 3, 5, 9]
    print(merge_sort(a))

程序运行结果为:[3, 4, 5, 7, 8, 9]
博主的Github地址:请点击这里

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值