arrays - 在使用递归的冒泡排序算法中记录交换次数?

标签 arrays ruby algorithm sorting recursion

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 中完成了解决方案,并且工作正常,我只是想知道是否有一种方法可以在该方法递归运行时将这些数字分组在一起。提前致谢。

最佳答案

您也可以不使用全局变量:

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

关于arrays - 在使用递归的冒泡排序算法中记录交换次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558052/

相关文章:

java - 数组中的数组,100 行,动态列

ruby-on-rails - 如何重新编译 Ruby 和 OpenSSL?

ruby - 如何在ruby中提取方括号内的内容

algorithm - 在解决旅行商问题时,分支定界算法如何比暴力算法更快?

ios - 如何在 Objective-C 中的上一个高度和下一个高度之间留出一些空间来制作随机高度?

c++ - 范围树构建

c++ - 如何在 C++ 中为固定大小的数组类创建模板定义?

ios - NSPredicate 过滤字典数组(Swift)

python - 在 numpy 对象数组中搜索

ruby - 请解释这个方法