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

    1.归并算法思想:

          归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 归并排序采用分而治之的原理:

           一、将一个序列从中间位置分成两个序列;

           二、在将这两个子序列按照第一步继续二分下去;

           三、直到所有子序列的长度都为1,也就是不可以再二分截止。这时候再两两合并成一个有序序列即可。

    2.算法时间空间复杂度:

       每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)

    3.稳定性:稳定

    4.python代码:

     1 #coding:utf-8
     2 #合并两个有序数列
     3 def merge(a, b):
     4     '''
     5     :param a: 数列a
     6     :param b: 数列b
     7     :return: 返回排序好的数列
     8     '''
     9     c = [] #存放排序好的元素
    10     h = j = 0 #两个指针分别从头开始遍历两个数列
    11     while j < len(a) and h < len(b):
    12         if a[j] < b[h]:
    13             c.append(a[j])
    14             j += 1
    15         else:
    16             c.append(b[h])
    17             h += 1
    18     #将剩余的直接加入到列表中
    19     if j == len(a):
    20         for i in b[h:]:
    21             c.append(i)
    22     else:
    23         for i in a[j:]:
    24             c.append(i)
    25 
    26     return c
    27 
    28 #递归的对数列进行排序
    29 def merge_sort(lists):
    30     if len(lists) <= 1:
    31         return lists
    32     middle = len(lists)//2
    33     left = merge_sort(lists[:middle])
    34     right = merge_sort(lists[middle:])
    35     return merge(left, right)
    36 
    37 
    38 if __name__ == '__main__':
    39     s = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6]
    40     print("before sort:",s)
    41     s1 = merge_sort(s)
    42     print("after sort:",s1)

    5.输出结果

    6.参考原文:

    https://www.cnblogs.com/chengxiao/p/6194356.html

  • 相关阅读:
    [LeetCode] Construct Binary Tree from Inorder and Pretorder Traversal
    [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
    [LeetCode] Candy
    [LeetCode] Next Permutation
    [LeetCode] Permutation Sequence
    [LeetCode] Permutations II
    【转载pku】三十分钟掌握STL
    [LeetCode] Permutations
    【附论文】Facebook推面部识别软件 精准度高达97.25%
    【转载】limits.h
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/13207791.html
Copyright © 2011-2022 走看看