欢迎访问宙启技术站
智能推送

如何使用Python函数实现归并排序算法?

发布时间:2023-05-21 20:04:36

归并排序是一种快速、稳定的排序算法,基于分治思想,将数组分成两个部分,对两个部分分别递归排序,最后将两个有序数组合并成一个有序数组。本文将为你介绍如何使用Python函数实现归并排序算法。

1. 分解问题

将数组分成两个部分并递归排序,直到数组只有一个元素或者为空。

def merge_sort(arr):
    if len(arr) < 2:
        return arr
    mid = len(arr) // 2
    left_arr = arr[:mid]
    right_arr = arr[mid:]
    left_arr = merge_sort(left_arr)
    right_arr = merge_sort(right_arr)
    return merge(left_arr, right_arr)

2. 合并两个有序数组

将两个有序数组合并成一个有序数组。

def merge(left_arr, right_arr):
    i = 0
    j = 0
    result = []
    while i < len(left_arr) and j < len(right_arr):
        if left_arr[i] <= right_arr[j]:
            result.append(left_arr[i])
            i += 1
        else:
            result.append(right_arr[j])
            j += 1
    result += left_arr[i:]
    result += right_arr[j:]
    return result

3. 完整代码

def merge_sort(arr):
    if len(arr) < 2:
        return arr
    mid = len(arr) // 2
    left_arr = arr[:mid]
    right_arr = arr[mid:]
    left_arr = merge_sort(left_arr)
    right_arr = merge_sort(right_arr)
    return merge(left_arr, right_arr)

def merge(left_arr, right_arr):
    i = 0
    j = 0
    result = []
    while i < len(left_arr) and j < len(right_arr):
        if left_arr[i] <= right_arr[j]:
            result.append(left_arr[i])
            i += 1
        else:
            result.append(right_arr[j])
            j += 1
    result += left_arr[i:]
    result += right_arr[j:]
    return result

arr = [2, 3, 1, 5, 4]
print(merge_sort(arr))

4. 结论

归并排序算法是一种快速、稳定的排序算法,使用Python函数实现非常方便。但是由于归并排序算法需要额外的存储空间来存储临时数组,因此在实际应用中需要根据实际情况选择不同的排序算法。