选用list存储待排序的n个元素,定义一个merge()函数用于完成将两个有序子序列arr[left:mid]和arr[mid+1:right]归并成一个有序的序列arr[left:right]】。求其Python代码
时间: 2024-12-14 21:24:38 浏览: 19
在Python中,你可以使用递归的方式来实现合并排序(Merge Sort)的`merge()`函数,它是一个经典的分治算法。这里是一个简单的示例:
```python
def merge(arr, left, mid, right):
# 创建临时数组来存放合并后的结果
n1 = mid - left + 1
n2 = right - mid
# 创建临时列表L[]、R[]
L = [0] * n1
R = [0] * n2
# 将左右两个子数组复制到临时数组L和R中
for i in range(n1):
L[i] = arr[left + i]
for j in range(n2):
R[j] = arr[mid + 1 + j]
# 指针初始化
i = 0
j = 0
k = left
# 合并过程
while i < n1 and j < n2:
if L[i] <= R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
# 如果左半部分还有剩余元素,直接添加
while i < n1:
arr[k] = L[i]
i += 1
k += 1
# 如果右半部分还有剩余元素,直接添加
while j < n2:
arr[k] = R[j]
j += 1
k += 1
# 调用合并函数对整个数组进行排序
def merge_sort(arr, left=0, right=None):
if right is None:
right = len(arr) - 1
if left < right:
mid = (left + right) // 2
merge_sort(arr, left, mid)
merge_sort(arr, mid + 1, right)
merge(arr, left, mid, right)
# 示例:
arr = [4, 2, 1, 5, 7, 6, 3]
merge_sort(arr)
print("Sorted array:", arr)
```
在这个代码中,`merge_sort()`函数首先检查数组长度是否需要分割,然后递归地将其分为两半,最后调用`merge()`函数将两个已排序的部分合并。
阅读全文