在计算机科学中,排序算法是一种基本而重要的技术。合并排序(Merge Sort)作为一种高效的比较排序算法,在众多排序方法中独树一帜。它基于分治法的思想,通过将数组分为较小的部分进行排序,然后逐步合并这些部分来获得最终的有序序列。
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
left_sorted = merge_sort(left_half)
right_sorted = merge_sort(right_half)
return merge(left_sorted, right_sorted)
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
# 测试代码
arr = [34, 7, 23, 32, 5, 62]
sorted_arr = merge_sort(arr)
print(sorted_arr) # 输出: [5, 7, 23, 32, 34, 62]
时间复杂度:合并排序的最坏、平均和最好情况时间复杂度均为 O(n log n),其中 n 是数组长度。每次递归调用都会将问题规模减半,而合并步骤需要遍历整个数组。
空间复杂度:O(n)。为了存储临时子数组,算法在最坏情况下需要额外的空间。
通过上述介绍,我们了解了合并排序的基本概念、工作原理以及其实现方法。作为一种基于分治策略的经典算法,它在许多情况下能够提供高效的解决方案。然而,在实际应用中选择合适的排序算法还需要综合考虑数据的特点和实际需求。