需要帮助理解 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 = true
和 sorted = 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#。
我需要帮助来理解此编程解决方案中的一些语法和逻辑。
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 = true
和 sorted = 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#。