使用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]
这个排序函数可以使用于整数、浮点数、日期等类型的有序序列,可以在数据量很大的情况下快速排序。
