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

在Python中实现归并排序算法

发布时间:2023-07-06 08:42:32

归并排序是一种递归算法,它将一个待排序的数组或列表分成两个子数组,在将这两个子数组排序之后再将它们合并成一个有序的数组。归并排序算法的核心思想是分而治之,即将问题划分成更小的子问题来解决。

在Python中实现归并排序算法可以按照以下步骤进行:

1. 定义一个递归函数merge_sort来实现归并排序。该函数接受一个待排序的数组作为参数。

2. 在merge_sort函数中,首先检查数组的长度,如果数组的长度小于等于1,直接返回数组。

3. 如果数组的长度大于1,则将数组平均分成两部分,并分别调用merge_sort函数进行递归排序。分别得到左半部分和右半部分的有序数组。

4. 对左右两个有序数组进行合并。定义一个merge函数来实现合并操作。merge函数接受两个有序数组作为参数,并返回一个合并后的有序数组。

5. 在merge函数中,分别定义两个指针i和j来指向左右两个有序数组的 个元素。

6. 比较两个指针所指的元素大小,将较小的元素加入到合并数组中,并将相应指针后移一位。

7. 重复上述比较过程,直到其中一个数组的所有元素都已加入到合并数组中。

8. 将剩余的未加入合并数组的元素依次加入。

9. 返回合并后的有序数组。

10. 在merge_sort函数中,返回合并左右两个有序数组后的结果。

下面是基于这个思路的Python代码实现:

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

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

使用该归并排序算法对一个数组进行排序的代码示例:

arr = [5, 2, 8, 4, 1, 9, 7]
sorted_arr = merge_sort(arr)
print(sorted_arr)

输出结果为:[1, 2, 4, 5, 7, 8, 9]

归并排序算法的时间复杂度为O(nlogn),其中n是待排序数组的长度。归并排序是稳定的排序算法,适用于对大量数据进行排序的场景。