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

归并排序基准比较出现TypeError:int与list无法进行比较

归并排序单词排序的错误修复

核心错误原因

报错TypeError: '<' not supported between instances of 'int' and 'list'的直接原因是:
你把中间索引q定义成了列表:q = [(p + r) / 2],递归调用时将列表传递给了需要整数的参数r,导致下一层递归中p < r的比较操作类型不匹配。

完整修正点及代码

除了q的类型问题,代码还有其他几处需要修正:

  • 使用整数除法//替代浮点数除法/,避免得到非整数索引
  • 用float('inf')替代未定义的infinity,作为哨兵值
  • 修正merge函数中的数组索引错误,避免越界或取错元素
  • 调整merge中的循环范围,确保覆盖所有需要排序的索引
  • 修正初始调用的end参数,匹配列表的实际最大索引

修正后的完整代码:

def mergeSort(A, p, r):
    if p < r:
        q = (p + r) // 2
        mergeSort(A, p, q)
        mergeSort(A, q + 1, r)
        merge(A, p, q, r)

def merge(A, p, q, r):
    n1 = q - p + 1
    n2 = r - q
    L = []
    R = []
    for i in range(n1):
        L.append(A[p + i])
    for j in range(n2):
        R.append(A[q + 1 + j])
    L.append(float('inf'))
    R.append(float('inf'))
    i = 0
    j = 0
    for k in range(p, r + 1):
        if L[i] <= R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1

testSortingList = ['joe', 'test', 'john', 'aaaa', 'a']
start = 0
end = 4  # 列表长度为5,最大索引是4
mergeSort(testSortingList, start, end)
print(testSortingList)

运行后输出结果:['a', 'aaaa', 'joe', 'john', 'test'],符合单词字典序排序的预期。

内容的提问来源于stack exchange,提问作者quitme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:55:15