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

编写Python函数实现归并排序算法

发布时间:2023-07-01 18:05:24

归并排序(Merge Sort)是一种基于分治策略的排序算法,其基本思想是将原始数组分成较小的数组,直到每个小数组只有一个元素,然后将这些小数组合并为较大的数组,最终得到一个有序的数组。

实现归并排序算法的关键是实现合并(Merge)操作。在合并操作中,我们需要创建一个临时数组,将两个已排序的子数组按照顺序合并到临时数组中,最后将临时数组的元素复制回原始数组。

下面是Python代码实现归并排序算法的一个例子:

def merge_sort(arr):
    # 递归终止条件:当数组长度为1时,即认为数组已经有序
    if len(arr) <= 1:
        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):
    # 创建一个临时数组来存储合并后的结果
    merged_arr = []
    
    # 初始化左右子数组的下标
    left_index = 0
    right_index = 0
    
    # 依次比较左右子数组的元素,将较小的元素添加到合并数组中
    while left_index < len(left_arr) and right_index < len(right_arr):
        if left_arr[left_index] <= right_arr[right_index]:
            merged_arr.append(left_arr[left_index])
            left_index += 1
        else:
            merged_arr.append(right_arr[right_index])
            right_index += 1
    
    # 将剩余的元素添加到合并数组中
    merged_arr.extend(left_arr[left_index:])
    merged_arr.extend(right_arr[right_index:])
    
    return merged_arr

这段代码中的merge_sort函数实现了归并排序算法。它首先将数组分成两个子数组,然后递归地对每个子数组进行归并排序。最后,它调用merge函数将两个已排序的子数组合并为一个有序的数组。

merge函数实现了合并操作。它创建一个临时数组来存储合并后的结果。然后,它初始化左右子数组的下标,依次比较左右子数组的元素,并将较小的元素添加到合并数组中。最后,将剩余的元素添加到合并数组中。

归并排序的时间复杂度是O(nlogn),其中n是数组的长度。归并排序是一种稳定的排序算法,适用于大规模数据的排序。

使用归并排序算法对一个数组进行排序的示例如下:

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

以上就是使用Python实现归并排序算法的示例代码。通过递归地将问题分解为更小的子问题,并使用适当的合并策略,归并排序算法能够高效地解决排序问题。