• python 归并排序


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

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

    1. import timeit
    2. import random
    3. def randomList(n):
    4. '''返回一个长度为n的整数列表,数据范围[0,1000) '''
    5. iList = []
    6. for i in range(n):
    7. iList.append(random.randrange(1000))
    8. return iList
    9. def mergeSort(iList):
    10. if len(iList) <= 1:
    11. return iList
    12. middle = len(iList)//2
    13. left, right = iList[0:middle], iList[middle:]
    14. return mergeList(mergeSort(left), mergeSort(right))
    15. def mergeList(left, right):
    16. mList = []
    17. while left and right:
    18. if left[0] >= right[0]:
    19. mList.append(right.pop(0))
    20. else:
    21. mList.append(left.pop(0))
    22. while left:
    23. mList.append(left.pop(0))
    24. while right:
    25. mList.append(right.pop(0))
    26. return mList
    27. if __name__ == "__main__":
    28. iList = randomList(20)
    29. print(iList)
    30. print(mergeSort(iList))
    31. # print(timeit.timeit("mergeSort(iList)", "from __main__ import mergeSort,iList", number=100))

  • 相关阅读:
    Vue3中ref与reactive的区别
    REVV Racing 指定赛车赛事,发挥最大潜力吧!
    Vue的指令(一)
    给四个点坐标计算两条直线的交点
    (C语言)fscanf与fprintf函数详解
    智能BI平台(后端)-- 项目介绍
    【Linux网络】典型NAS存储方式:NFS网络共享存储服务
    摩尔信使MThings实用功能盘点
    vector容器 常用函数
    springboot + easyRules 搭建规则引擎服务
  • 原文地址:https://blog.csdn.net/qq_40107571/article/details/127911620