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

Python快速排序代码触发int与NoneType不支持'>='比较报错如何解决

报错触发原因
  • 核心问题出在partition函数的缩进错误,导致函数在部分执行路径下没有显式返回值,默认返回None:
    1. 当待处理的子数组长度≤2时,for j in range(left + 1, right)生成的遍历序列为空,for循环全程不执行,函数没有走到return语句,返回None
    2. 即使进入for循环,你把交换 pivot 元素、返回 pivot 最终位置的代码写在了for循环内部,第一次循环迭代就会直接返回,既不符合快排分区的逻辑,也存在循环未执行就返回None的问题
  • 当partition返回None时,赋值给变量j,后续递归调用quickSort(arr, left, j)时,传入的第三个参数是None,进入下一层递归判断if left >= right时,就会出现整数和None比较的类型错误,也就是你遇到的报错。
代码修改方案

你只需要调整partition函数的缩进,把交换pivot、返回pivot位置的代码移到for循环外部即可,同时可以删除快排函数里无效的自我交换代码,修复后的完整代码如下:

def quickSort(arr, left, right):
    # 边界条件:子数组长度为0或1时直接返回
    if left >= right:
        return
    
    j = partition(arr, left, right)
    # 递归排序左右分区
    quickSort(arr, left, j)
    quickSort(arr, j + 1, right)

def partition(arr, left, right):
    p = arr[left]
    i = left + 1

    for j in range(left + 1, right):
        if arr[j] < p:
            # 交换元素
            arr[i], arr[j] = arr[j], arr[i]
            i += 1
    
    # 遍历完所有元素后,将pivot交换到正确的分界位置
    arr[left], arr[i-1] = arr[i-1], arr[left]
    # 返回pivot的最终位置
    return i - 1
额外优化建议
  • 你当前读取文件的逻辑没有关闭文件句柄,建议改为with open('test1.txt') as textFile1:的写法,执行完后会自动关闭文件,避免资源泄漏
  • 你当前选择最左元素作为pivot的实现,在处理已经有序的数组时时间复杂度会退化到O(n²),如果需要处理有序数据集,可以优化为随机选择pivot的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:09:02