📅  最后修改于: 2023-12-03 15:00:19.660000             🧑  作者: Mango
合并排序是一种分治算法,它将一个大问题分解成多个小问题,并通过递归调用自身来解决这些小问题。合并排序算法的核心思想是将待排序序列分成两个子序列,对每个子序列进行排序,然后将它们合并成一个有序序列。
合并排序的基本步骤如下:
其中,合并两个有序序列的方法是:维护两个指针,分别指向左右两个子序列的开头,比较两个指针指向的元素,将较小的元素加入到结果序列中,同时将指针向后移动一位,直到其中一个子序列为空。此时将另一个子序列中剩余的元素加入到结果序列中即可。
下面是一个 Python 实现的合并排序算法示例:
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left_arr = arr[:mid]
right_arr = arr[mid:]
merge_sort(left_arr)
merge_sort(right_arr)
i = j = k = 0
while i < len(left_arr) and j < len(right_arr):
if left_arr[i] < right_arr[j]:
arr[k] = left_arr[i]
i += 1
else:
arr[k] = right_arr[j]
j += 1
k += 1
while i < len(left_arr):
arr[k] = left_arr[i]
i += 1
k += 1
while j < len(right_arr):
arr[k] = right_arr[j]
j += 1
k += 1
return arr
合并排序的时间复杂度为 O(nlogn),其中 n 是待排序序列的长度。在最坏情况下,合并排序的空间复杂度为 O(n)。由于合并排序的空间复杂度比较高,因此在应用时需要考虑较多。