在Python中实现归并排序算法
发布时间:2023-07-06 08:42:32
归并排序是一种递归算法,它将一个待排序的数组或列表分成两个子数组,在将这两个子数组排序之后再将它们合并成一个有序的数组。归并排序算法的核心思想是分而治之,即将问题划分成更小的子问题来解决。
在Python中实现归并排序算法可以按照以下步骤进行:
1. 定义一个递归函数merge_sort来实现归并排序。该函数接受一个待排序的数组作为参数。
2. 在merge_sort函数中,首先检查数组的长度,如果数组的长度小于等于1,直接返回数组。
3. 如果数组的长度大于1,则将数组平均分成两部分,并分别调用merge_sort函数进行递归排序。分别得到左半部分和右半部分的有序数组。
4. 对左右两个有序数组进行合并。定义一个merge函数来实现合并操作。merge函数接受两个有序数组作为参数,并返回一个合并后的有序数组。
5. 在merge函数中,分别定义两个指针i和j来指向左右两个有序数组的 个元素。
6. 比较两个指针所指的元素大小,将较小的元素加入到合并数组中,并将相应指针后移一位。
7. 重复上述比较过程,直到其中一个数组的所有元素都已加入到合并数组中。
8. 将剩余的未加入合并数组的元素依次加入。
9. 返回合并后的有序数组。
10. 在merge_sort函数中,返回合并左右两个有序数组后的结果。
下面是基于这个思路的Python代码实现:
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_arr = merge_sort(arr[:mid])
right_arr = merge_sort(arr[mid:])
return merge(left_arr, right_arr)
def merge(left_arr, right_arr):
i = 0
j = 0
merged_arr = []
while i < len(left_arr) and j < len(right_arr):
if left_arr[i] <= right_arr[j]:
merged_arr.append(left_arr[i])
i += 1
else:
merged_arr.append(right_arr[j])
j += 1
merged_arr.extend(left_arr[i:])
merged_arr.extend(right_arr[j:])
return merged_arr
使用该归并排序算法对一个数组进行排序的代码示例:
arr = [5, 2, 8, 4, 1, 9, 7] sorted_arr = merge_sort(arr) print(sorted_arr)
输出结果为:[1, 2, 4, 5, 7, 8, 9]
归并排序算法的时间复杂度为O(nlogn),其中n是待排序数组的长度。归并排序是稳定的排序算法,适用于对大量数据进行排序的场景。
