返回

归并排序,我举个例子你就看懂了

闲谈

归并排序简介

归并排序(Merge Sort)是一种建立在归并操作上的一种有效、稳定的排序算法。它基于分治法(Divide and Conquer)的思想,将一个无序列表分解成几个有序子列表,然后将这些子列表合并成一个有序列表。

归并排序算法的优点是:

  • 稳定排序算法:归并排序保持元素的相对顺序,如果两个元素相等,则它们在排序后的列表中保持相同的相对顺序。
  • 时间复杂度为O(n log n):在平均情况下和最坏情况下,归并排序的时间复杂度都为O(n log n)。
  • 空间复杂度为O(n):归并排序需要额外的空间来存储临时列表,因此它的空间复杂度为O(n)。

归并排序步骤

归并排序的步骤如下:

  1. 将列表分解成子列表 :将列表分解成两个或多个较小的子列表,直到每个子列表只有一个元素或没有元素。
  2. 对子列表进行排序 :使用归并排序或其他排序算法对每个子列表进行排序。
  3. 合并子列表 :将排好序的子列表合并成一个有序列表。

归并排序示例

为了更清楚地理解归并排序的原理和步骤,我们通过一个简单的例子来演示它。假设我们有一个无序列表:[5, 3, 1, 2, 4],我们使用归并排序对其进行排序。

  1. 将列表分解成子列表

    • 将列表[5, 3, 1, 2, 4]分解成两个子列表:[5, 3]和[1, 2, 4]。
    • 将子列表[5, 3]分解成两个子列表:[5]和[3]。
    • 将子列表[1, 2, 4]分解成两个子列表:[1]、[2]和[4]。
  2. 对子列表进行排序

    • 子列表[5]和[3]已经是有序的,因此不需要再进行排序。
    • 子列表[1]、[2]和[4]也是有序的,因此不需要再进行排序。
  3. 合并子列表

    • 将子列表[5]和[3]合并成有序子列表[3, 5]。
    • 将子列表[1]、[2]和[4]合并成有序子列表[1, 2, 4]。
    • 将有序子列表[3, 5]和[1, 2, 4]合并成有序列表[1, 2, 3, 4, 5]。

归并排序代码实现

以下是用Python实现的归并排序算法的代码:

def merge_sort(array):
    """
    归并排序算法

    参数:
        array:需要排序的列表

    返回:
        排序后的列表
    """

    if len(array) <= 1:
        return array

    # 将列表分解成两个子列表
    mid = len(array) // 2
    left_half = array[:mid]
    right_half = array[mid:]

    # 对子列表进行排序
    left_half = merge_sort(left_half)
    right_half = merge_sort(right_half)

    # 合并子列表
    return merge(left_half, right_half)


def merge(left, right):
    """
    合并两个有序列表

    参数:
        left:第一个有序列表
        right:第二个有序列表

    返回:
        合并后的有序列表
    """

    merged = []
    left_index = 0
    right_index = 0

    # 比较两个列表的元素,将较小的元素添加到合并后的列表中
    while left_index < len(left) and right_index < len(right):
        if left[left_index] <= right[right_index]:
            merged.append(left[left_index])
            left_index += 1
        else:
            merged.append(right[right_index])
            right_index += 1

    # 将剩余元素添加到合并后的列表中
    merged.extend(left[left_index:])
    merged.extend(right[right_index:])

    return merged

归并排序的应用

归并排序是一种广泛使用的排序算法,它在许多领域都有应用,包括:

  • 数据分析 :归并排序可用于对大型数据集进行排序,以便进行分析和可视化。
  • 数据库管理 :归并排序可用于对数据库中的记录进行排序,以便进行快速查找和检索。
  • 图形学 :归并排序可用于对图形中的点或线段进行排序,以便进行渲染和显示。
  • 算法 :归并排序可用于对算法中的数据进行排序,以便进行比较和分析。

总结

归并排序是一种高效稳定的排序算法,它基于分治法(Divide and Conquer)的思想,将一个无序列表分解成几个有序子列表,然后将这些子列表合并成一个有序列表。归并排序的时间复杂度为O(n log n),空间复杂度为O(n),并且它是一种稳定排序算法。归并排序在许多领域都有应用,包括数据分析、数据库管理、图形学和算法。