如何修改MergeSort实现数组降序排序?(Python代码问题)
修复归并排序实现降序排序的问题
要实现降序归并排序,输入数组["cat", "ca", "can", "cat", "cat"],期望输出["cat","cat","cat","can","ca"]。原升序归并排序代码修改比较条件后无法得到正确结果,以下是问题分析和修复方案:
原代码存在的问题
- 递归调用函数名错误:
MergeSort函数内调用了未定义的reverseSort,应改为调用自身 - 剩余元素处理的循环条件错误:两个收尾循环的条件写成了
j1 > len(half1)和j2 > len(half2),这永远不会成立,正确条件应为j1 < len(half1)和j2 < len(half2) - 降序比较逻辑错误:原比较条件未正确实现降序取元素的逻辑,应优先放入较大的元素
修正后的完整代码
def MergeSortReverse(B): if len(B) <= 1: return mid = len(B) // 2 half1 = B[:mid] half2 = B[mid:] MergeSortReverse(half1) MergeSortReverse(half2) merge_desc(half1, half2, B) def merge_desc(half1, half2, B): i = 0 j1 = 0 j2 = 0 # 降序逻辑:优先取较大的元素放入结果数组 while j1 < len(half1) and j2 < len(half2): if half1[j1] > half2[j2]: B[i] = half1[j1] j1 += 1 else: B[i] = half2[j2] j2 += 1 i += 1 # 处理half1中剩余的元素 while j1 < len(half1): B[i] = half1[j1] j1 += 1 i += 1 # 处理half2中剩余的元素 while j2 < len(half2): B[i] = half2[j2] j2 += 1 i += 1
测试示例
arr = ["cat", "ca", "can", "cat", "cat"] MergeSortReverse(arr) print(arr) # 输出: ['cat', 'cat', 'cat', 'can', 'ca']
内容的提问来源于stack exchange,提问作者Robo Jumble
相关产品推荐
相关产品推荐

