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

    首先归并排序使用了二分法,归根到底的思想还是分而治之。拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。然后再将她们按照两个有序数组的样子合并起来。

    两个有序数组排序的方法则非常简单,同时对两个数组的第一个位置进行比大小,将小的放入一个空数组,然后被放入空数组的那个位置的指针往后 移一个,然后继续和另外一个数组的上一个位置进行比较,以此类推。到最后任何一个数组先出栈完,就将另外i一个数组里的所有元素追加到新数组后面。

    由于递归拆分的时间复杂度是logN 然而,进行两个有序数组排序的方法复杂度是N该算法的时间复杂度是N*logN 所以是NlogN。

    def merge(list1, list2):
        tmp = []
        i = 0
        j = 0
        while i < len(list1) and j < len(list2):
            if list1[i] < list2[j]:
                tmp.append(list1[i])
                i += 1
            else:
                tmp.append(list2[j])
                j += 1
    
        if i == len(list1):
            for t in list2[j:]:
                tmp.append(t)
        else:
            for t in list1[i:]:
                tmp.append(t)
        return tmp
    
    def merge_sort(list):
        if len(list) < 2:
            return list
        mid = int(len(list) / 2)
        left = merge_sort(list[:mid])
        right = merge_sort(list[mid:])
        return merge(left, right)
    
    
    
    if __name__ == '__main__':
        list = [32, 13, 28, 5, 23, 56, 12, 78, 34, 1, 67, 4]
        result = merge_sort(list)
        print(result)
    
  • 相关阅读:
    4.状态简览
    3.获取git仓库
    2.获取帮助
    1.初次运行git前的配置
    linux命令总结
    使用github参与到开源项目的维护
    mongodb远程连接
    springmvc/springboot处理前台字符串日期自动转换成后台date类型的三种办法
    事务明明配置没有问题,出错时却不执行回滚
    tmux 安装
  • 原文地址:https://www.cnblogs.com/fredkeke/p/9453889.html
Copyright © 2011-2022 走看看