python 归并排序

归并排序(Merge Sort)是一种典型的递归法排序。它把复杂的 排序过程分解成一个简单的合并子序列的过程。至于怎么得到这个子 序列,就得自己调用自己了。

归并排序首先要做的就是将数列分成左右两部分(最好是等 分),然后将左、右两个子数列排序完毕后再合并到一起就成了一个 有序数列。左、右两个子数列怎么变成有序数列呢?那就回头调用自 己,再把子数列分成左、右两部分,然后把子子数列排序完毕后合并 成子数列……有点像那个著名的故事,山上有座山,山里有座庙,庙 里有两个和尚……。和尚讲故事是无穷无尽的,幸运的是数列的长度 即使再大也不会是无尽的。所以当子子子……序列分到不可再分割的 时候(最小的序列长度为1时),就可以返回开始合并数列了。逐步合 并子子子子……数列,到最后就得到了一个新的有序数列

import timeit
import random

def randomList(n):
    '''返回一个长度为n的整数列表,数据范围[0,1000) '''
    iList = []
    for i in range(n):
        iList.append(random.randrange(1000))
    return iList

def mergeSort(iList):
    if len(iList) <= 1:
        return iList
    middle = len(iList)//2
    left, right = iList[0:middle], iList[middle:]
    return mergeList(mergeSort(left), mergeSort(right))

def mergeList(left, right):
    mList = []
    while left and right:
        if left[0] >= right[0]:
            mList.append(right.pop(0))
        else:
            mList.append(left.pop(0))
    while left:
        mList.append(left.pop(0))
    while right:
        mList.append(right.pop(0))
    return mList


if __name__ == "__main__":
    iList = randomList(20)
    print(iList)
    print(mergeSort(iList))
    # print(timeit.timeit("mergeSort(iList)", "from __main__ import mergeSort,iList", number=100))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一壶浊酒..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值