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

Python实现末尾元素为轴的降序快排出现无限循环问题求助

问题根因分析

你当前代码进入无限循环/运行异常的核心问题出在partition函数的边界控制和指针移动逻辑上,具体错误如下:

  • 右指针移动未限制左边界,仅判断end > -1会导致指针移动到当前处理分区的左边界之外,出现数组越界风险。当待分区序列中所有元素都大于等于pivot时,右指针会一直左移直到-1,后续交换逻辑直接报错。
  • 左指针移动未限制右边界,缺少start < end的判断条件,会导致左指针超过右指针后仍继续移动,破坏双指针的终止逻辑,极端场景下会出现无限循环。
  • 右指针初始位置包含pivot本身,导致第一轮移动直接跳过pivot,虽然逻辑上不会直接报错,但不符合常规双指针分区的设计逻辑,增加边界异常概率。
修正后的实现代码
def partition(start, end, array):
    pivot_index = end 
    pivot = array[pivot_index]
    # 右指针初始跳过pivot本身
    end = end - 1

    while start < end:
        # 右指针找第一个大于pivot的元素,限制不小于左指针
        while end >= start and array[end] <= pivot:
            end -= 1
        
        # 左指针找第一个小于等于pivot的元素,限制不大于右指针
        while start < end and array[start] > pivot:
            start += 1

        if(start < end):
            array[start], array[end] = array[end], array[start]
      
    # 确认当前位置元素和pivot的大小关系,选择正确的交换位置
    if array[start] > pivot:
        start += 1
    array[start], array[pivot_index] = array[pivot_index], array[start]
    return start

def quick_sort(start, end, array):
    if (start < end):
        p = partition(start, end, array)
        quick_sort(start, p - 1, array)
        quick_sort(p + 1, end, array)
          
        
array = [ 12, 3, 18, 7, 15, 11, 13, 9 ]
quick_sort(0, len(array) - 1, array)

print(f'Sorted array: {array}')
运行结果

执行修正后的代码,输出符合降序排序要求:
Sorted array: [18, 15, 13, 12, 11, 9, 7, 3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:27:02