我正在用Python实现Stooge排序,我不明白为什么我对数组排序所做的更改不起作用。换言之,当我递归地向下钻取时,单元似乎正在交换,但是在函数返回之后,数组的顺序没有改变。这是一个范围问题,还是其他一些我还不明白的pythonism?还是我的算法不正确
import math
def StoogeSort(A):
n = len(A)
if (n == 2 and A[0] > A[1]):
tmp = A[0]
A[0] = A[1]
A[1] = tmp
elif n > 2:
m = int(math.ceil((2 * n) / 3))
StoogeSort(A[0:m])
StoogeSort(A[m-n:n])
StoogeSort(A[0:m])
return A
A = [4,2,1]
StoogeSort(A)
print "End:",A
A = [44,12,8,33,100]
StoogeSort(A)
print "End:",A
1.-您正在向递归发送原始数组的副本,而不仅仅是原始数组的一部分。 2.-虽然您将发送原始数组的一部分,pseudocode Stooge Sort algorithm不处理数组的一部分,只处理索引
问题在于您的切片-
A[0:m]
等。这些切片不会在原始列表中创建视图,而是创建新的列表可以使用at the bottom of this answer所述的numpy数组,或者使用递归调用的返回值来构造要返回的新列表
相关问题 更多 >
编程相关推荐