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

求助:我的Python快速排序程序无法完成完整排序的问题

快速排序部分排序的问题修复

嘿,我一眼就揪出你代码里的问题了——在quick_sort函数里,你递归调用的是pivot函数,而不是递归调用quick_sort本身!这就是数组只能部分排序的核心原因:你只完成了一次分区操作,却没对左右子数组继续递归排序。

错误点拆解

看你原代码里的这段:

def quick_sort(arr, low, high):
    if (low < high):
        pi = pivot(arr, low, high)
        pivot(arr, low, pi-1)  # 这里应该调用quick_sort,不是pivot
        pivot(arr, pi+1, high) # 同样,这里也得是quick_sort

pivot函数的作用只是把基准元素放到正确位置、完成一次分区,但它不会对子数组进行排序。你必须递归调用quick_sort,才能让分区后的左右子数组也完成排序流程。

修正后的完整代码

def quick_sort(arr, low, high):
    if low < high:
        pi = pivot(arr, low, high)
        # 递归排序基准元素左侧的子数组
        quick_sort(arr, low, pi - 1)
        # 递归排序基准元素右侧的子数组
        quick_sort(arr, pi + 1, high)

def pivot(arr, low, high):
    i = low - 1
    pivot_val = arr[high]
    for j in range(low, high):
        if arr[j] <= pivot_val:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
    # 将基准元素移到分区后的正确位置
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return i + 1

# 用你的测试数组验证
numbers = [-9859, -8554, -9846, -9558, -9153, -9483, -7946, -8255, -9743, -8330, -7632, -7513, -7125, 1756, -5176, -441, -3385, 896, -4748, 3811, 4285, -5883, -4342, 6275, 5753, 585, -2491, -243, -3590, -4377, 5986, -3393, -3727, 2976, -1532, -3924, 53, -2461, -5882, -1022, 2881, -3586, -3191, 6153, -4970, -5602, -5944, 5528, -3281, 1515, -680, -1975, -2472, -4371, -2574, -5248, -773, -271, -1967, 5079, 3040, -5871, 4825, 2810, -2301, 1371, 315, 2911, 2669, 2477, -3205, -2350, 2402, 5217, 6205, 2593, 4595, -4340, 6654, 7783, 9653, 8331, 8092, 6869, 7556, 9719, 8555, 9430, 8137, 9057, 8124, 7662, 6991, 6928, 7728, 7849, 7955, 7696, 7775]

print("排序前:", numbers)
quick_sort(numbers, 0, len(numbers)-1)
print("排序后:", numbers)

修正说明

把quick_sort里的两次pivot调用换成quick_sort递归调用后,算法会对每个分区后的子数组重复执行「分区+递归排序」的操作,直到所有子数组的长度为1(此时low >= high,递归终止),这样就能得到完全排序的数组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:25:12