使用Python实现八大排序之归并排序

归并排序

归并排序其实就是将一个长度为n数组拆分成一个个长度为1的子序列,然后再通过两两进行对比,组成n/2个长度为2的有序数组,然后再两组两组进行对比组合形成n/4个长度为4的有序数组,直至将整个数组排序完成。
下图更加形象的向我们展示了归并排序的整个流程。
这里写图片描述
那对于一个数组的归并排序其实总的来说就是两个步骤:分解和组合。分解就是将数组分割成一个个长度为1的子序列,组合就是想子序列进行组合,但是并不是简单的组合,而是排序后组合后一个有序的子序列。最后将分解的所有子序列组合在一起成为已经排好序的序列。
下面来看使用Python如何来实现归并排序:

#-*- coding:utf-8 -*-
# __author__ = 'ziteng'
# __time__ ='15:05'

def mergeList(lists):
    if len(lists) <= 1:
        return lists
    mid = len(lists) / 2
    listA = mergeList(lists[:mid])
    listB = mergeList(lists[mid:])
    return mergeSortList(listA,listB)

def mergeSortList(listA,listB):
    li_sort = []
    a = 0
    b = 0
    while a < len(listA) and b < len(listB):
        if listA[a] < listB[b]:
            li_sort.append(listA[a])
            a += 1
        else:
            li_sort.append(listB[b])
            b += 1

    while a < len(listA):
        li_sort.append(listA[a])
        a += 1

    while b < len(listB):
        li_sort.append(listB[b])
        b += 1

    return li_sort

if __name__ == '__main__':
    li = [9,4,6,3,5,2,7]
    result = mergeList(li)
    print (result)

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值