zoukankan      html  css  js  c++  java
  • Golang 归并排序(MergeSort)


    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。

    算法描述

    • 把长度为n的输入序列分成两个长度为n/2的子序列;
    • 对这两个子序列分别采用归并排序;
    • 将两个排序好的子序列合并成一个最终的排序序列
    def mergeSort(alist):
        """归并排序(稳定|nlgn)"""
        n = len(alist)
        if n <= 1:
            return alist
        mid = n//2
        
        #left 采用归并排序后形成新的有序列表
        left_li = mergeSort(alist[:mid])
        #right 采用归并排序后形成新的有序列表
        right_li = mergeSort(alist[mid:])
        
        #merge(left, right) 将两个有序的子序列合并为一个新的整体
        left_pointer, right_pointer = 0, 0
        result = []
        
        while left_pointer < len(left_li) and right_pointer<len(right_li):
            if left_li[left_pointer] < right_li[right_pointer]:
                result.append(left_li[left_pointer])
                left_pointer += 1
            else:
                result.append(right_li[right_pointer])
                right_pointer += 1
                
        result += left_li[left_pointer:]
        result += right_li[right_pointer:]
        return result
    
  • 相关阅读:
    MySql和oracle的不同
    Session的有效期设置
    WebSocket和WebRtc的一些心得
    Spring事务管理
    Tomcat下使用war包发布项目
    Log4j记日志功能
    javascript typeof和instanceof
    js模块化的意义
    有关call和apply的理解。
    h5滑动插件(包含幻灯片滑动逻辑)
  • 原文地址:https://www.cnblogs.com/wangyiyang/p/12205574.html
Copyright © 2011-2022 走看看