Python 将快速排序实施到就地排序列表';不要更新名单

Python 将快速排序实施到就地排序列表';不要更新名单,python,python-3.x,recursion,quicksort,Python,Python 3.x,Recursion,Quicksort,我在python3.6中使用递归实现了快速排序算法。它按递增顺序对列表进行排序。但是,问题是,在代码中以及代码运行完成后,列表元素的顺序不会改变 如果删除递归的基本情况,并让它在达到最大递归深度时失败,并将print语句放入分区方法中,则可以看到它更改了列表中的元素 def partition(arr, start, end): pivot = arr[end] ix = start for i in range(start, end): print("i

我在python3.6中使用递归实现了快速排序算法。它按递增顺序对列表进行排序。但是,问题是,在代码中以及代码运行完成后,列表元素的顺序不会改变

如果删除递归的基本情况,并让它在达到最大递归深度时失败,并将print语句放入分区方法中,则可以看到它更改了列表中的元素

def partition(arr, start, end):
    pivot = arr[end]
    ix = start
    for i in range(start, end):
        print("i = ", i)
        if arr[i] <= pivot:
            arr[i], arr[ix] = arr[ix], arr[i]
            ix += 1
    arr[ix], arr[end] = arr[end], arr[ix]
    return ix

def quick_sort(arr, start, end):
    if start < end: return arr
    ix = partition(arr, start, end)
    quick_sort(arr, start, ix-1)
    quick_sort(arr, ix+1, end)

arr = [2,4,7,8,9,1,3,5,6,12,32]

print("before", arr)
print("output", quick_sort(arr, 0, len(ans)-1))
print("after", arr)

OUTPUT 
before [2, 4, 7, 8, 9, 1, 3, 5, 6, 12, 32]
output [2, 4, 7, 8, 9, 1, 3, 5, 6, 12, 32]
after [2, 4, 7, 8, 9, 1, 3, 5, 6, 12, 32]
def分区(arr、start、end):
枢轴=arr[结束]
ix=开始
对于范围内的i(开始、结束):
打印(“i=”,i)
如果arr[i]在此:

但是,因为函数在适当的位置运行,所以它不应该返回任何内容,所以最好使其

if start > end: return
您将看到
quick\u sort(arr,0,len(ans)-1)
将返回
None
,但在函数调用之后,
arr
将被排序。

此处:

但是,因为函数在适当的位置运行,所以它不应该返回任何内容,所以最好使其

if start > end: return

您将看到
quick\u sort(arr,0,len(ans)-1)
将返回
None
,但是在函数调用之后,
arr
将被排序。

只是一个小的旁注,但是应该已经完成。例如,
ans
是未定义的。只是一个小的旁注,但应该是完整的。例如,
ans
是未定义的。
if start > end: return