def bubble_sort(a)
something_changed = false
swap = 0
a[0...-1].each_with_index do |num, i|
if a[i] > a[i + 1]
a[i], a[i + 1] = a[i + 1], a[i]
something_changed = true
swap += 1
end
end
bubble_sort(a) if something_changed
p swap
end
arr = [50, 60, 70, 20, 30, 10]
bubble_sort(arr)
# 0
# 1
# 1
# 3
# 3
# 3
所以我已经在这方面工作了很长一段时间,并尝试了每一个方向。我已经设法理解数组如何通过冒泡排序进行排序,我知道对于这个特定的数组,有11个替换阵列要进行排序。每次方法递归运行时,我都可以打印出所有交换次数,但是对于我的生活,我不能将这些数字分组到一个数组中,这样我就可以添加它们并显示11,任何见解都会太棒了我已经在python中完成了解决方案并且工作正常,我只是想知道是否有一种方法可以将这些数字组合在一起,因为该方法是递归运行的。提前谢谢。
答案 0 :(得分:2)
您也可以不使用全局变量:
def bubble_sort(a, swap_sum = 0)
something_changed = false
a[0...-1].each_with_index do |num, i|
if a[i] > a[i + 1]
a[i], a[i + 1] = a[i + 1], a[i]
something_changed = true
swap_sum += 1
end
end
something_changed ? bubble_sort(a, swap_sum) : swap_sum
end
arr = [50, 60, 70, 20, 30, 10]
bubble_sort(arr) #=> 11
答案 1 :(得分:1)
$count = []
def bubble_sort(a)
something_changed = false
swap = 0
a[0...-1].each_with_index do |num, i|
if a[i] > a[i + 1]
a[i], a[i + 1] = a[i + 1], a[i]
something_changed = true
swap += 1
end
end
bubble_sort(a) if something_changed
$count << swap
return $count.inject(:+)
end
arr = [50, 60, 70, 20, 30, 10]
p bubble_sort(arr) # 11
没关系,原来我在我设置的全局变量上使用了p而不是return(我之前正在尝试的东西,上面的问题没有显示)。现在我只能显示替换次数。希望这可以帮助有人下线。谢谢你的时间。