이 스왑이 제대로 작동하지 않는 이유를 알아 내려고하고 있습니다. Ruby 변수 스왑 혼동
def partition (array, from, to)
#declared pivot to last index of array
pivot = array[to]
pIndex = from
for i in from..to-1
if array[i] <= pivot
array[i], array[pIndex] = array[pIndex], array[i]
pIndex += 1
end
end
p pivot
p array[to]
### why doesn't this work properly? pivot is same as array[to]
### array[pIndex], pivot = pivot, array[pIndex]
### the swap below works
array[pIndex], array[to] = array[to], array[pIndex]
p array
return pIndex
end
가 나는
pivot = array[to]
이 : 나는 이것은 퀵에 대한 파티션 방법입니다 repl.it에 값을 확인하는
p
을 추가했다. 그런 다음 배열 [pIndex] :
array[pIndex], pivot = pivot, array[pIndex]
및
array[pIndex]
값이
pivot
으로 변경되지만
pivot
은
array[pIndex]
으로 변경되지 않습니다. 그러나 내가 이것을 대신 할 때 :
array[pIndex], array[to] = array[to], array[pIndex]
완벽하게 작동합니다. 아무도 그 이유를 말할 수 있습니까? 갖추어
예 : 마지막 스왑 전에
arr = [7, 2, 1, 6, 8, 5, 3, 4]
partition(arr, 0,7)
배열이 일어나는 [2, 1, 3, 6, 8, 5, 7, 4]
이다. 스왑의 마지막 줄은 pivot
이 4이고 array[pIndex]
이 6 인 것으로 가정합니다. 배열을 [2, 1, 3, 4, 8, 5, 7, 6]
으로 변경해야합니다.
루비 코드에서'for '를 보는 것은 매우 드문 일입니다. '(~에서 ...) .each do | i |'는 Ruby의 전형적인 예입니다. – tadman