• python实现归并排序算法


        归并排序英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)

    1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归

    可以同时进行。

      当初为什么这个算法被发明,是为了解决什么实际问题,我尽量去搜索,可是,一直没找到答案。不过,可以肯定的是,

    在这个计算机刚横空出世的年代,为了解决一些问题,发明这种算法就不足为奇了。

      该算法的操作步骤:

    1. 将序列每相邻两个数字进行归并操作,形成ceil(n/2)个序列,排序后每个序列包含两/一个元素
    2. 若此时序列数不是1个则将上述序列再次归并,形成ceil(n/4)个序列,每个序列包含四/三个元素
    3. 重复步骤2,直到所有元素排序完毕,即序列数为1

      python的代码实现:

    def merge_sort(a_list):
            print("Splitting ",a_list)
            if len(a_list) > 1:
                    mid = len(a_list) // 2
                    left_half = a_list[:mid]
                    right_half = a_list[mid:]
    
                    merge_sort(left_half)
                    merge_sort(right_half)
             
                    i = 0
                    j = 0
                    k = 0
    
                    while i < len(left_half) and j < len(right_half):
                            if left_half[i] < right_half[j]:
                                    a_list[k] = left_half[i]
                                    i = i + 1
                            else:
                                    a_list[k] = right_half[j]
                                    j = j + 1
        
                            k = k + 1
        
                    while j < len(right_half):
                            a_list[k] = right_half[j]
                            j = j + 1
                            k = k + 1
                    while i < len(left_half):
                            a_list[k] = left_half[i]
                            i = i + 1
                            k = k + 1
    
            print("Merging ", a_list)
    
    a_list = [54,26,93,17,77,31,44,55,20]
    merge_sort(a_list)
    print a_list

    参考文档:

    1 https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F 

    2 python解决数据结构和算法

  • 相关阅读:
    清除Jpanel组件并重绘
    idea配置ssm框架
    java异常机制
    JavaSwing关于GridBagLayout(网格袋布局)的使用
    (趣味哈哈镜)JMF中摄像头相关的问题
    三大WEB服务器(apache lighttpd nginx) 对比分析
    在前台接收jsonp数据(练习)
    cookie存数组的方法
    接口验证每个ip每小时只能访问2次(自己实验:有待改进)
    DOM操作xml数据
  • 原文地址:https://www.cnblogs.com/dylancao/p/8257766.html
Copyright © 2020-2023  润新知