Python 归并排序算法实现与代码解析
Python 归并排序算法实现与代码解析
归并排序是一种高效的排序算法,采用分治法的思想将待排序数组递归地分成两部分,分别排序后再合并成有序数组。
以下是 Python 实现归并排序的代码示例:pythondef merge(left, right): result = [] i = left_index = 0 j = right_index = 0 # 初始化为0 while i < len(left) and j < len(right): if left[i] < right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result += left[i:] result += right[j:] return result
def merge_sort(arr): if len(arr) <= 1: return arr else: mid = len(arr) // 2 # 从中间划分两个子序列 left_half = arr[:mid] right_half = arr[mid:] left_half = merge_sort(left_half) # 对左侧子序列进行递归排序 right_half = merge_sort(right_half) return merge(left_half, right_half) # 归并
tesl = [19, 6, 8, 3, 4, 2, 5, 7, 10]print(merge_sort(tesl))
代码解析:
-
merge(left, right)函数: - 接受两个有序数组left和right作为参数。 - 创建一个空列表result用于存储合并后的有序数组。 - 使用索引i和j分别遍历left和right数组。 - 比较left[i]和right[j]的值,将较小的元素添加到result列表中,并将对应的索引加 1。 - 当其中一个数组遍历完成后,将另一个数组剩余元素添加到result列表中。 - 最后返回合并后的有序数组result。 -
merge_sort(arr)函数: - 接受待排序数组arr作为参数。 - 如果数组长度小于等于 1,则直接返回数组,因为它已经是有序的。 - 否则,将数组从中间分成两个子数组left_half和right_half。 - 递归调用merge_sort()函数对left_half和right_half进行排序。 - 最后调用merge()函数将排序后的left_half和right_half合并成一个有序数组,并返回。
代码示例中还包含以下内容:
tesl = [19, 6, 8, 3, 4, 2, 5, 7, 10]:定义了一个无序的测试数组。-print(merge_sort(tesl)):调用merge_sort()函数对tesl数组进行排序,并将排序后的结果打印到控制台。
常见错误分析:
在实现归并排序时,需要注意以下几点:
- 合并两个有序数组时,需要将剩余元素添加到结果数组中,否则会导致数据丢失。- 递归调用
merge_sort()函数时,需要将返回值赋给对应的变量,否则会导致排序结果错误。
希望这份代码解析能够帮助你理解 Python 中归并排序算法的实现。
原文地址: https://www.cveoy.top/t/topic/kom 著作权归作者所有。请勿转载和采集!