快速排序执行排序到位不更新列表清单

问题描述 投票:0回答:1

我使用递归作出python3.6快速排序algortihm的实现。它在排序递增的顺序到位名单。但问题是,列表中的元素顺序不更改代码和代码完成后运行

如果删除了基本情况的递归和让它无法在达到最大递归深度,并把打印语句在分区方法,你可以看到它改变的元素列表

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]
python python-3.x recursion quicksort
1个回答
2
投票

这里:

if start < end: return arr

该逻辑被反转。它应该是

if start > end: return arr

但是,由于你的函数就地操作,它应该不会返回任何东西,所以最好使它

if start > end: return

你会看到,quick_sort(arr, 0, len(ans)-1)将返回None,但函数调用后,arr进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.