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
相关产品推荐
相关产品推荐

