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

     1 #!/usr/bin/env python3
     2 
     3 def merge(ary):
     4         if len(ary) == 1: return ary
     5         num = len(ary) // 2
     6         arya = merge(ary[:num])
     7         aryb = merge(ary[num:])
     8         return merge_sort(arya, aryb)
     9 
    10 def merge_sort(arya, aryb):
    11         indexa, indexb = 0, 0
    12         li = []
    13         while indexa < len(arya) and indexb < len(aryb):
    14                 if arya[indexa] <= aryb[indexb]:
    15                         li.append(arya[indexa])
    16                         indexa += 1
    17                 else:
    18                         li.append(aryb[indexb])
    19                         indexb += 1
    20         li = li + arya[indexa:] + aryb[indexb:]
    21         return li
    22 
    23 if __name__ == '__main__':
    24         ary = [2,1,4,7,8,3,4,7,9,10,5,2,4,7]
    25         print(merge(ary))

    merge_sort就如上一篇博客写的一样,可以对两个有序数组进行合并。算法复杂度为0(n)

    现在给定了一个无序数组,可以使用分治的方法对其进行处理。分治即分而治理的意思。

    所以这里将 ary 这个大数组从中间平分为两个小数组 arya 和 aryb 。

    然后 在分别对 arya 实行分治 和对 aryb 实行分治。

    直到 arya 或 aryb 中的元素只有一个才结束。  (单个元素是已经排好序的) 其实这也是递归的思想,必须要有递归的终点,即基本情况。单个元素就是基本情况。

    这个merge函数的算法复杂度为0(lgn)

    所以归并排序的算法复杂度为0(nlgn)

    参考:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/

    感谢原文作者

  • 相关阅读:
    stm32 usart 串口
    stm32 usart 串口
    stm32 PWM
    stm32 PWM
    stm32 定时器 通用定时器
    stm32 定时器 通用定时器
    stm32 外部中断
    linux+jre+apache+mysql+tomcat调优
    Cent OS服务器配置(JDK+Tomcat+MySQL)
    linux---文本编辑vi
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6422288.html
Copyright © 2011-2022 走看看