我想弄清楚爲什麼這個交換不能正常工作。我添加p
以覈實repl.it這是一個快速排序分區方法的值: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]
。然後它與數組[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]
。
在Ruby代碼中看到'for'是非常不尋常的。 '(從...到)每個都是更典型的Ruby。 – tadman