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

如何使用Python函数归并排序列表?

发布时间:2023-07-01 14:36:32

归并排序是一种通过将列表逐步划分为更小的部分,然后逐步合并这些部分来排序列表的常用算法。其主要思想是通过将待排序的列表划分为两个较小的子列表,分别对这两个子列表进行排序,然后再将排好序的子列表进行合并。

以下是使用Python函数实现归并排序的步骤:

1. 创建一个名为merge_sort的函数,该函数接受一个列表作为参数。

2. 检查列表的长度是否小于等于1,如果是,则返回原列表作为基本情况。

3. 如果列表的长度大于1,则使用len函数获取列表的长度,并将其除以2,得到中间索引值。同时,使用切片操作将列表拆分成两个子列表。

- 子列表1:从索引0到中间索引值。

- 子列表2:从中间索引值到列表末尾。

4. 对两个子列表分别调用merge_sort函数进行排序,并将排序后的结果存储在两个新的变量中。

5. 创建一个空列表sorted_list,用于存储最终排序好的结果。

6. 创建两个指针ij,初始值都为0,分别指向两个排序好的子列表。

7. 使用一个循环,将子列表中的元素逐个比较,并将较小的元素添加到sorted_list中。同时,将相应指针递增1。

8. 检查指针i是否等于子列表1的长度,如果是,则将子列表2中剩余的元素逐个添加到sorted_list中。

9. 检查指针j是否等于子列表2的长度,如果是,则将子列表1中剩余的元素逐个添加到sorted_list中。

10. 返回sorted_list作为最终结果。

以下是完整的Python代码实现:

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    
    mid = len(lst) // 2
    left_list = lst[:mid]
    right_list = lst[mid:]
    
    left_list = merge_sort(left_list)
    right_list = merge_sort(right_list)
    
    return merge(left_list, right_list)

def merge(left_list, right_list):
    sorted_list = []
    i = j = 0
    
    while i < len(left_list) and j < len(right_list):
        if left_list[i] < right_list[j]:
            sorted_list.append(left_list[i])
            i += 1
        else:
            sorted_list.append(right_list[j])
            j += 1
            
    while i < len(left_list):
        sorted_list.append(left_list[i])
        i += 1
        
    while j < len(right_list):
        sorted_list.append(right_list[j])
        j += 1
        
    return sorted_list

使用上述代码可以对任意列表进行归并排序操作。例如,假设有一个名为my_list的列表,要对其进行排序,可以调用merge_sort函数,并将my_list作为参数传入:

my_list = [5, 3, 8, 2, 1, 10, 7]
sorted_list = merge_sort(my_list)
print(sorted_list)

调用merge_sort函数后,将输出列表[1, 2, 3, 5, 7, 8, 10],表示排序完成。