Python实现quickSort时内部打印有序但返回数组未排序问题求助
快速排序函数返回正确但原数组未更新的问题解决
你的问题根源很简单:没有接收函数返回的排序后数组,原变量array根本没被修改。
原因解释
Python中,虽然列表是可变对象,但你在函数里执行array = quickSort(left) + pivot + quickSort(right)时,是创建了一个全新的列表对象,而非修改传入的原列表。函数最后返回了这个排序好的新数组,但你调用时只写了quickSort(array),没有把返回值赋值给原变量,所以原数组始终是初始的未排序状态。
修复方案
只需要在调用函数时,将返回值重新赋值给原变量即可:
def quickSort(array): if len(array) <= 1: return array p = 0 # pivot pointer = p + 1 left = [] pivot = [] right = [] pivot.append(array[p]) # 分割数组为三个部分 while pointer < len(array): if array[pointer] < array[p]: left.append(array[pointer]) elif array[pointer] > array[p]: right.append(array[pointer]) else: pivot.append(array[pointer]) pointer += 1 array = quickSort(left) + pivot + quickSort(right) return array array = [7,5,8,1] array = quickSort(array) # 接收排序后的返回值 print(array) # 输出:[1, 5, 7, 8]
你的排序逻辑本身是正确的,内部打印的array是函数内生成的新排序数组,只要接收返回值,外部就能得到正确的结果。
内容的提问来源于stack exchange,提问作者LiiiiilteChick
相关产品推荐
相关产品推荐

