我是编码和尝试在python中实现quicksort的新手。以下是代码但输出不正确。我哪里错了? 选择pivot作为第一个元素而不必合并。
def quicksort(A):
if len(A) > 1:
p = A[0]
i = 0
for j in A[1:]:
if j < p:
A[i] , j = j , A[i]
i = i+1
A[0] , A[i] = A[i] , A[0]
left = A[:i]
right = A[i+1:]
left = quicksort(left)
right = quicksort(right)
return A
else:
return A
更改后,代码为
def quicksort(A, left = None, right =None):
if left is None:
left = 0
if right is None:
right = len(A)
p =A[left]
i = left +1
for j in A[left+1:right]:
if A[j] < p:
A[i] , A[j] = A[j], A[i]
i = i + 1
A[left] , A[i-1] = A[i-1], A[left]
quicksort(A[:i])
quicksort(A[i+1:])
return A
我收到错误,列表索引超出范围。
答案 0 :(得分:1)
这些正在制作A
切片的副本left = A[:i]
right = A[i+1:]
您对副本所做的任何事情都不会影响A
要修改A
inplace,你应该传递它以及左右索引作为参数
def quicksort(A, left=None, right=None):
if left is None:
left = 0
if right is None
right = len(A)
...
现在记住left
和right
是索引(不是代码中的列表)。修改函数的其余部分以直接更改A