我看到有更好的红宝石气泡排序代码已经发布在这里的地方: Using the Bubble sort method for an array in Ruby 但是我在调试当前代码时遇到问题,并希望找到一些帮助,找出我的代码无效的原因。感谢。
def bubble_sort(arr)
original = arr
x = 0
while x < arr.count - 1
if arr[x] < arr[x + 1]
y = arr[x + 1]
arr[x + 1] = arr[x]
arr[x] = y
end
x += 1
end
if original == arr
return arr
else
return bubble_sort(arr)
end
end
答案 0 :(得分:3)
其中一个问题是:
original = arr
您希望original
获得当前状态的arr
副本,对吗?好吧,不。它们将指向同一个数组。这就是为什么你的功能永远不会在这里递归的原因:
if original == arr
return arr
else
return bubble_sort[arr]
end
要复制数组,请使用dup
original = arr.dup
答案 1 :(得分:2)
四个问题:
bubble_sort[arr]
不起作用 - 您应该致电bubble_sort(arr)
original == arr
- 将永远为真,因为您之前已将其分配到arr
- 您应该使用dup
- original = arr.dup
arr[x] < arr [x+1]
将创建一个按相反顺序排序的数组... result = arr.dup
而不是original = arr.dup
以上修正后的代码:
def bubble_sort(arr)
result = arr.dup
x = 0
while x < result.count - 1
if result[x] > result[x + 1]
y = result[x + 1]
result[x + 1] = result[x]
result[x] = y
end
x += 1
end
if arr == result
return result
else
return bubble_sort(result)
end
end
bubble_sort([1,3,5,2,4])
# => [1, 2, 3, 4, 5]