归并排序是一种分治算法,它将数组分成两半,分别对这两半进行排序,然后将排序后的两半合并在一起。归并排序是一种稳定的排序算法,时间复杂度为O(n log n),其中n是数组中元素的数量。
以下是Python实现归并排序的一个例子:
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2 # 找到中间索引
L = arr[:mid] # 左半部分
R = arr[mid:] # 右半部分
merge_sort(L) # 递归地排序左半部分
merge_sort(R) # 递归地排序右半部分
# 合并两个有序数组
i = j = k = 0
# 复制数据到临时数组L[]
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
# 复制左半部分剩余的数据
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
# 复制右半部分剩余的数据
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
# 测试代码
arr = [12, 11, 13, 5, 6, 7]
print("未排序的数组:", arr)
merge_sort(arr)
print("排序后的数组:", arr)
这个例子中,merge_sort
函数首先找到数组的中间索引,然后将数组分为两部分,递归地对这两部分进行排序。最后,使用一个循环将排序后的两个数组合并为一个有序数组。