我知道在Python中,变量是通过给对象一个引用副本来传递的。但是我不明白为什么在我编写的下面的代码中,函数Partition
不会更改arr
的元素。你知道吗
def Partition(arr, lo, hi):
pivot = arr[lo]
i = lo
j = hi
while(True):
while(arr[i] < pivot):
i += 1
if i == hi: break
while(arr[j] > pivot):
j -= 1
if j == lo: break
if i >= j : break #check if ptrs cross
arr[i], arr[j] = arr[j], arr[i]
#swap lo and j
arr[lo], arr[j] = arr[j], arr[lo]
return j
def Sort(arr, start, end):
if (end <= start): return
right = Partition(arr, start, end)
Sort(arr, start, right-1)
Sort(arr, right+1, end)
这似乎是一个错误:
Partition
函数有逻辑问题。 如果使用调试器跟踪它,您将看到它总是在返回之前将数组恢复到其初始状态。实际上,数组会被视为已修改,问题是在对它进行一段时间的修改之后,它会恢复到进入函数时的状态。你知道吗你使用调试工具吗?如果没有,现在就开始。 如果是这样,请在
return j
语句上放置一个断点,并检查数组,您将了解我的意思。你知道吗您正在尝试实现Hoare分区,对吗? 我想你有点搞混了。这个问题是因为在第一次循环迭代之前,您正在与pivot进行比较,最后您将再次比较刚刚交换的元素。你知道吗
相关问题 更多 >
编程相关推荐