zoukankan      html  css  js  c++  java
  • 分治排序--归并排序



    def
    merge(a, b): x = [] while len(a) > 0 and len(b) > 0: if a[0] < b[0]: x.append(a.pop(0)) else: x.append(b.pop(0)) while len(a) > 0: x.append(a.pop(0)) while len(b) > 0: x.append(b.pop(0)) return x def halve(x): half = len(x) / 2 return x[:half], x[half:] def recursiveMergeSort(x): if len(x) == 1: return x a, b = halve(x) a = recursiveMergeSort(a) b = recursiveMergeSort(b) return merge(a, b) def iterativeMergeSort(x): queue = [[i] for i in x] while len( queue ) > 1: a, b = queue.pop(0), queue.pop(0) queue.append(merge(a, b)) return queue[0] x = [40, 82, 97, 47, 7] assert recursiveMergeSort(x) == [7, 40, 47, 82, 97] assert iterativeMergeSort(x) == [7, 40, 47, 82, 97]
    python 归并排序
    归并排序要点:
    1. 自顶向下分拆,之后又合并,当然符合递归的一般形式,先递后归嘛
    2. 融合merge算法的合理性:a与b的头指针,若a的小于b的,则a指针数据小于b的全部,同时它自然小于a自己的剩余数据,故其可以被添加为当前最小值
    3. 迭代算法产生合并对象时,就是分拆成多个小的有序数组,新生成的照样可以加入,执行合并;任意两个有序数组都可以进行归并得到有序的数组,所以归并的顺序无所谓,并不需要遵循上图的层次顺序。



    http://connor-johnson.com/2016/05/17/sorting-algorithms-in-python/
  • 相关阅读:
    linux 文件内容乱码 文件内容转码
    Loadrunner获取响应里面的内容
    定位获取下拉框元素
    RIDE转码问题
    api接口登录及打印返回值
    获取token值
    RIDE安装操作(二)
    from selenium import webdriver 运行报错解决方案
    超声和病理的web实现方案
    QT中字符串和整形相互转化
  • 原文地址:https://www.cnblogs.com/wdmx/p/10064300.html
Copyright © 2011-2022 走看看