需要帮助理解 Ruby 冒泡排序解决方案中的 syntax/logic

Need help understanding syntax/logic in Ruby bubble sort solution

我需要帮助来理解此编程解决方案中的一些语法和逻辑。

def bubble_sort(arr)
  sorted = false
  until sorted
    sorted = true
    (arr.count - 1).times do |i|
      if arr[i] > arr[i + 1]
        arr[i], arr[i + 1] = arr[i + 1], arr[i]
        sorted = false
      end
    end
  end

  arr
end

具体来说,我在理解 until 循环以及 sorted = truesorted = false 的部分时遇到了一些困难。我在这里做了一些阅读,我想我知道如果仍然需要对数组进行更改,sorted 将设置为 false 并且循环继续。但如果有人能再简单地向我解释一次,我将不胜感激。

看起来时间循环只对每个数组元素减一执行一次,然后交换位置。 until 循环如何发挥作用?

.times 循环遍历数组,将每个元素与其相邻元素进行比较,如果它们的顺序错误则交换它们。

外层 until sorted 循环重复这个过程,直到不再有任何改变。至此数组排序完毕。

sorted 变量记录我们在最后一次遍历数组时是否交换了任何元素。如果我们这样做了,数组就改变了,我们还没有完成。另一方面,如果没有元素被交换,sorted = false不执行,sorted仍然是true,我们可以退出外循环。

你是正确的,它遍历数组,检查值并在需要时交换 - 如果在该过程中完全进行了交换,它认为数组未排序并设置 sorted = false。如果是这种情况,until 循环将确保 整个新的传递 发生在数组中,以再次重做该过程。 until 循环唯一一次停止是在一次传递期间没有完成任何交换时。在每个 until 循环开始时,sorted 被设置为 true,因为它假定这将是最后一次传递 - 除非进行了设置 sorted = false 的交换,否则它将至少再进行一次传递。

如果您想要一个简洁的动画来可视化各种排序算法中发生的事情,请查看 http://visualgo.net/sorting.html#