You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:05:23