Python实现快速排序后数组未排序,请求问题排查与解决
问题排查与修复
你的快速排序实现存在两个关键问题,导致数组无法正确排序:
1. swap 函数完全无效
Python中函数参数传递是传对象引用,但你写的swap函数只是交换了局部变量x和y的值,根本不会修改原数组里的元素——因为你传入的是数组元素的副本,而非元素的索引或数组本身。
修复方案:
删掉单独的swap函数,在需要交换的位置直接操作数组:
# 替换原swap调用,直接交换数组内元素 array[a], array[b] = array[b], array[a]
2. quicksort 函数返回变量错误
quicksort的参数是arr,但你最后返回的是全局变量array。虽然当前场景下变量名刚好重合,但这是逻辑错误,应该返回传入的arr参数。
修复后的完整代码
def partition(array, left, right): x = array[right] left_pointer = left for right_pointer in range(left, right): if array[right_pointer] <= x: array[right_pointer], array[left_pointer] = array[left_pointer], array[right_pointer] left_pointer += 1 array[left_pointer], array[right] = array[right], array[left_pointer] return left_pointer def quicksort(arr, left, right): if left < right: pivot = partition(arr, left, right) quicksort(arr, left, pivot - 1) quicksort(arr, pivot + 1, right) return arr array = [2, 6, 5, 3, 8, 7, 1, 0] n = len(array) - 1 print(array) print(quicksort(array, 0, n))
运行后会输出正确排序的数组:[0, 1, 2, 3, 5, 6, 7, 8]
内容的提问来源于stack exchange,提问作者Seun Seun
相关产品推荐
相关产品推荐

