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

Python中的归并排序算法及其实现方法

发布时间:2023-06-18 12:36:19

归并排序算法是一种常用的排序算法,它的时间复杂度为O(nlogn),效率较高。该算法将待排序的序列分成两个子序列,将子序列分别进行排序,然后将两个已排序的子序列合并为一个有序的序列。在Python中实现该算法,需要编写递归函数来处理子序列的排序和合并。

下面是Python中的归并排序算法及其实现方法:

1. 定义一个函数merge_sort,它的输入为一个待排序的列表lst,输出为一个有序的列表。

2. 在merge_sort函数中,首先判断输入的列表是否为空或只有一个元素,如果是,则直接返回该列表,因为已经是有序的。如果不是,则将列表分成两个子列表:左子列表left和右子列表right。

3. 分别对左子列表和右子列表调用merge_sort函数进行排序,得到两个有序的子列表left_sorted和right_sorted。

4. 定义两个指针i和j,分别指向left_sorted和right_sorted的起始位置,同时定义一个空列表result用于存放合并后的有序列表。

5. 在循环中,比较left_sorted和right_sorted中当前位置指针所指的元素,将其中较小的元素添加到result列表中,并将其对应的指针向后移动一位。

6. 循环结束后,将left_sorted和right_sorted剩余的元素添加到result列表中。

7. 返回result列表即为排序后的列表。

下面是Python代码实现:

def merge_sort(lst):
    # 判断输入的列表是否为空或只有一个元素
    if len(lst) <= 1:
        return lst
    
    # 将列表分成左子列表和右子列表
    mid = len(lst) // 2
    left = lst[:mid]
    right = lst[mid:]
    
    # 对左子列表和右子列表分别进行排序
    left_sorted = merge_sort(left)
    right_sorted = merge_sort(right)
    
    # 合并两个已排序的子列表,得到一个有序的列表
    i, j = 0, 0
    result = []
    while i < len(left_sorted) and j < len(right_sorted):
        if left_sorted[i] < right_sorted[j]:
            result.append(left_sorted[i])
            i += 1
        else:
            result.append(right_sorted[j])
            j += 1
    result += left_sorted[i:]
    result += right_sorted[j:]
    
    return result

测试:

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

以上就是Python中的归并排序算法及其实现方法,该算法适用于任何类型的序列。通过递归分治的思路,可以将一个大问题分解成更小的子问题,从而提高排序的效率。