如何使用Python函数实现归并排序算法?
发布时间:2023-05-21 20:04:36
归并排序是一种快速、稳定的排序算法,基于分治思想,将数组分成两个部分,对两个部分分别递归排序,最后将两个有序数组合并成一个有序数组。本文将为你介绍如何使用Python函数实现归并排序算法。
1. 分解问题
将数组分成两个部分并递归排序,直到数组只有一个元素或者为空。
def merge_sort(arr):
if len(arr) < 2:
return arr
mid = len(arr) // 2
left_arr = arr[:mid]
right_arr = arr[mid:]
left_arr = merge_sort(left_arr)
right_arr = merge_sort(right_arr)
return merge(left_arr, right_arr)
2. 合并两个有序数组
将两个有序数组合并成一个有序数组。
def merge(left_arr, right_arr):
i = 0
j = 0
result = []
while i < len(left_arr) and j < len(right_arr):
if left_arr[i] <= right_arr[j]:
result.append(left_arr[i])
i += 1
else:
result.append(right_arr[j])
j += 1
result += left_arr[i:]
result += right_arr[j:]
return result
3. 完整代码
def merge_sort(arr):
if len(arr) < 2:
return arr
mid = len(arr) // 2
left_arr = arr[:mid]
right_arr = arr[mid:]
left_arr = merge_sort(left_arr)
right_arr = merge_sort(right_arr)
return merge(left_arr, right_arr)
def merge(left_arr, right_arr):
i = 0
j = 0
result = []
while i < len(left_arr) and j < len(right_arr):
if left_arr[i] <= right_arr[j]:
result.append(left_arr[i])
i += 1
else:
result.append(right_arr[j])
j += 1
result += left_arr[i:]
result += right_arr[j:]
return result
arr = [2, 3, 1, 5, 4]
print(merge_sort(arr))
4. 结论
归并排序算法是一种快速、稳定的排序算法,使用Python函数实现非常方便。但是由于归并排序算法需要额外的存储空间来存储临时数组,因此在实际应用中需要根据实际情况选择不同的排序算法。
