帮我写一个归并排序 用python
时间: 2024-03-09 13:21:56 浏览: 79
下面是一个归并排序的Python实现:
```python
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
merge_sort(left_half)
merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
```
这个实现使用了递归的方式,将原始数组分成左右两半,分别排序后再将其合并。在合并的过程中,我们使用了三个指针i,j和k,i和j分别指向左右两半的第一个元素,k则指向当前合并的位置。我们比较左右两半的元素大小,将较小的元素赋值给arr[k],并将相应的指针向后移动一位。当其中一个指针到达末尾时,我们把另一半的剩余元素都添加到arr中。
最后,我们可以通过调用merge_sort函数来对数组进行排序:
```python
arr = [3, 1, 4, 2, 7, 5, 8, 6]
merge_sort(arr)
print(arr) # 输出 [1, 2, 3, 4, 5, 6, 7, 8]
```
阅读全文
相关推荐


















