我正在尝试在Ruby中构建一个递归冒泡排序方法。它通过一次通过很好,但它在那之后继续返回。看来我的
if array == swapped_array
正在被触发,但我不明白我的array
变量在哪里被重新定义。
def bubble_sort(array, swapped = true)
return array if swapped == false
i = 0
if swapped == true
swapped_array = comparator(array)
end
if array == swapped_array
swapped = false
bubble_sort(array, swapped)
else bubble_sort(swapped_array)
end
end
def comparator(array, i = 0)
return array if i == array.length - 1
if array[i] > array[i+1]
array[i], array[i+1] = array[i+1], array[i]
end
i += 1
comparator(array, i)
end
答案 0 :(得分:2)
swapped_array = comparator(array)
...获取comparator
的返回值并将其分配给swapped_array
。但是comparator
(最终)返回原始参数array
,它与调用者中定义的array
相同。array == swapped_array
。所以
.dup
总是如此。
如果要比较两个不同的数组,可以在数组上调用{{1}}。这将创建一个与原始对象具有相同值的新对象。
答案 1 :(得分:0)
这是因为在comparator
中,您正在交换原始数组中的元素。无论你做什么,array
中的swapped_array
和bubble_sort
都指向相同的数组实例,因此它们将始终相同。要解决此问题,请在定义的顶部添加一行:
def comparator(array, i = 0)
array = array.dup
...
end