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

利用Python编写归并排序算法

发布时间:2023-07-04 14:57:26

归并排序是一种分治算法,它将待排序的序列不断划分为较小的子序列,直到子序列只包含一个元素,然后通过将相邻的子序列进行合并,最终得到一个有序的序列。

归并排序的核心思想是将待排序的序列不断划分为两个子序列,分别对这两个子序列进行排序,然后再将排序后的子序列合并得到一个有序的序列。具体步骤如下:

1. 划分:将待排序的序列一分为二,分别得到左右两个子序列。

2. 递归排序:对左右两个子序列分别进行递归排序。

3. 合并:将排序后的子序列合并为一个有序的序列。

下面是使用Python编写归并排序算法的示例代码:

def merge_sort(arr):
    # 递归结束条件:序列长度为1
    if len(arr) <= 1:
        return arr
    
    # 划分序列
    mid = len(arr) // 2
    left = arr[:mid]
    right = arr[mid:]
    
    # 递归排序左右子序列
    left = merge_sort(left)
    right = merge_sort(right)
    
    # 合并排序后的左右子序列
    return merge(left, right)

def merge(left, right):
    result = []
    i, j = 0, 0
    
    # 比较左右子序列的元素,将较小的元素添加到结果序列中
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    # 将剩余的元素添加到结果序列中
    result.extend(left[i:])
    result.extend(right[j:])
    
    return result

以上代码中,merge_sort函数是递归地对序列进行归并排序的函数,它将序列一分为二,并分别对左右子序列进行递归排序。而merge函数是将排序后的左右子序列进行合并的函数,它比较左右子序列的元素,并按照从小到大的顺序将它们添加到结果序列中。

最后,我们可以通过调用merge_sort函数对一个待排序的序列进行归并排序。比如,对一个包含多个整数的列表进行排序:

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

以上代码的输出结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9],即将序列按照从小到大的顺序进行了排序。

归并排序的时间复杂度是O(nlogn),其中n是待排序序列的长度。归并排序是一种稳定的排序算法,适用于待排序序列长度较大的情况。