Python实现归并排序算法

2023-04-16 00:00:00 算法 排序 归并

归并排序是一种分治算法,它将一个大问题分成若干个小问题,分别解决这些小问题,最终将这些小问题的解合并成一个大问题的解。归并排序的基本思路是将数组分成两个部分,对这两个部分分别排序,然后将这两个有序的部分归并到一起。

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

def merge_sort(arr):
    # 如果数组中只有一个元素,直接返回
    if len(arr) <= 1:
        return arr

    # 分成两个部分
    mid = len(arr) // 2
    left = arr[:mid]
    right = arr[mid:]

    # 分别对左右两个部分进行排序
    left = merge_sort(left)
    right = merge_sort(right)

    # 合并左右两个部分
    return merge(left, right)


def merge(left, right):
    # 初始化结果数组和左右两个子数组的起始下标
    result = []
    i = j = 0

    # 循环合并左右两个子数组
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    # 将剩余的元素加入结果数组
    result += left[i:]
    result += right[j:]

    # 返回结果数组
    return result

上面的代码中,merge_sort 函数实现了归并排序的算法。如果数组中只有一个元素,直接返回该元素;否则分成两个部分,分别对这两个部分进行排序,然后将这两个有序的部分归并到一起,并返回结果数组。merge 函数实现了合并两个有序数组的功能,result 数组是合并后的结果数组,ij 分别表示左右两个子数组的起始下标,循环合并左右两个子数组并加入 result 数组中,最终返回结果数组。

下面是对此函数的使用示例:

arr = [3, 5, 1, 4, 2, 6]
sorted_arr = merge_sort(arr)
print(sorted_arr)  # 输出 [1, 2, 3, 4, 5, 6]

在上面的示例中,我们定义了一个数组 arr,并将其传入 merge_sort 函数中进行排序,最终输出排序后的结果数组。

相关文章