归并排序基准比较出现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
相关产品推荐
相关产品推荐

