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)
    
  • 相关阅读:
    Hive_进阶
    日志分析_统计每日各时段的的PV,UV
    Sqoop_mysql,hive,hdfs导入导出操作
    Sqoop_ 简单介绍
    Sqoop_ 从 hive 导到mysql常遇九问题总结(转)
    MySql_设置编码
    Linux_MySql_yum_安装
    Hive_DDL与DML
    UI自动化持续化集成
    HDU 5073 数学题
  • 原文地址:https://www.cnblogs.com/fredkeke/p/9453889.html
Copyright © 2011-2022 走看看