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

  • 相关阅读:
    【题解】[Codeforces 1221D] Make The Fence Great Again【DP】
    PAM / 回文自动机(回文树)略解
    【AGC048F】【2020六校联考WC #9】序列【构造】【DP】
    json解析:[2]fastjson 使用
    JAVA获取时间戳,哪个更快
    Android拍照、录像、录音代码范例
    取消GridView/ListView item被点击时的效果
    Android中使用speex将PCM录音格式转Wav格式
    【Android】【录音】Android录音--AudioRecord、MediaRecorder
    Android软键盘遮挡的四种解决方案
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/13207791.html
Copyright © 2011-2022 走看看