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

使用Python实现归并排序的函数

发布时间:2023-05-21 02:33:38

归并排序是一种经典的排序算法,其基本思想是将待排序序列不断地分为两部分,直到最后只剩下一个元素,然后不断地将分开的两个有序序列合并,直到最终得到一个完全有序的序列。

使用Python实现归并排序的函数,可以分为以下三个步骤:

1. 分割序列:将待排序序列分为两部分,分别递归地对左右两个子序列进行排序,直到最终得到只有一个元素的子序列;

2. 合并序列:将两个有序的子序列合并成一个有序的序列,依次比较左右两个子序列的 个元素,将较小的元素放入新的序列中;

3. 返回结果:在递归过程中,不断地合并左右两个子序列,最终得到排序后的完整序列。

下面是使用Python实现归并排序的函数代码:

def merge_sort(lst):
    if len(lst) <= 1:  # 如果序列长度小于等于1,直接返回序列
        return lst
    mid = len(lst) // 2  # 找到序列的中间位置
    left_list = merge_sort(lst[:mid])  # 递归地对原序列左半部分进行排序
    right_list = merge_sort(lst[mid:])  # 递归地对原序列右半部分进行排序
    # 合并左右两个已排序的子序列
    left_cursor, right_cursor = 0, 0  # 分别在左右两个子序列中取出      个元素进行比较
    result_lst = []  # 存放已排序的结果序列
    while left_cursor < len(left_list) and right_cursor < len(right_list):
        if left_list[left_cursor] < right_list[right_cursor]:
            result_lst.append(left_list[left_cursor])
            left_cursor += 1
        else:
            result_lst.append(right_list[right_cursor])
            right_cursor += 1
    # 如果左右两个子序列长度不同,将未比较的部分直接加入结果序列
    result_lst += left_list[left_cursor:]
    result_lst += right_list[right_cursor:]
    return result_lst  # 返回已排序的结果序列

在上面的代码中,首先判断序列长度是否小于等于1,如果是,则直接返回序列。否则,找到序列的中间位置,递归地对左右两个子序列进行排序。然后,创建左右两个游标,分别从左右两个有序子序列的 个元素开始比较,将小的元素加入结果序列中。最后,判断左右两个有序子序列的长度,将未比较的部分直接加入结果序列中。最终返回已排序的结果序列。

使用Python实现归并排序的函数可以直接调用它,如下所示:

>>> lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> merge_sort(lst)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

这个排序函数可以使用于整数、浮点数、日期等类型的有序序列,可以在数据量很大的情况下快速排序。