归并排序 python实现

归并排序 python实现

  • 简介
  • 思路
  • 分析
  • 代码
  • 引用

简介

归并排序(Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个典型例子。不断的将已有序的子序列合并,最终得到有序的元素列。归并排序是一种稳定的排序算法。

思路

(1)将要排序的序列分为若干个长度为1的子序列;
(2)将各个子序列与其相邻的子序列合并到一起,合并过程中进行比较排序;
(3)依此类推,直至整个元素列有序。

例子:升序排序 [3, 5, 4, 6, 1, 2, 7, 8]

归并排序 python实现_第1张图片
以第三趟归并为例,解释一下合并过程中是如何比较排序的

归并排序 python实现_第2张图片

分析

归并排序速度仅次于快速排序,一般用于整体无序,但是子序列有序的情况下。归并排序的比较次数小于快速排序,但是移动次数多于快速排序。
每次合并操作的平均时间复杂度为O(N),而合并次数为O(logN),所以平均时间复杂度为O(N logN)。此外,归并排序的最好、最坏时间复杂度也是O(N logN)。

代码

def Merge(left_List, right_List):
    i, j = 0, 0
    res = []
    while i < len(left_List) and j < len(right_List):
        if left_List[i] < right_List[j]:
            res.append(left_List[i])
            i = i+1
        else:
            res.append(right_List[j])
            j = j+1
    if i < len(left_List): res += left_List[i:]
    if j < len(right_List): res += right_List[j:]
    return res

def MergeSort(List):
    size = len(List)
    if size == 1: return List
    mid = size // 2
    left_List = MergeSort(List[:mid])
    right_List = MergeSort(List[mid:])
    return Merge(left_List, right_List)

引用

图解排序算法之归并排序
百度百科-归并排序

你可能感兴趣的:(排序)