Arrays 需要帮助理解Ruby气泡排序解决方案中的语法/逻辑吗
我需要帮助理解这个编程解决方案中的一些语法和逻辑Arrays 需要帮助理解Ruby气泡排序解决方案中的语法/逻辑吗,arrays,ruby,sorting,bubble-sort,Arrays,Ruby,Sorting,Bubble Sort,我需要帮助理解这个编程解决方案中的一些语法和逻辑 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
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
,循环继续。但如果有人能再给我解释一次,我将不胜感激
看起来times循环对每个数组元素只执行一次,然后交换位置。until循环是如何发挥作用的?times循环对数组进行单次传递,将每个元素与其相邻元素进行比较,如果它们的顺序错误,则进行交换 外部
until sorted
循环重复此过程,直到不再有任何更改。此时将对数组进行排序
sorted
变量记录我们在上一次通过数组时是否交换了任何元素。如果我们这样做了,阵列就改变了,我们还没有完成。另一方面,如果没有交换任何元素,sorted=false
不会执行,sorted
保持true
,我们可以退出外部循环。正确的是,它在数组中迭代,检查值并根据需要进行交换-如果在该过程中进行了交换,则会认为数组未排序,并将sorted=false。如果是这种情况,until循环将确保在整个数组中发生一个新的过程,以再次执行该过程。直到循环停止的唯一时间是在传递过程中没有进行任何交换时。在每个循环开始时,直到sorted设置为true,因为它假定这将是最后一次传递-除非进行交换,将sorted设置为false,否则它将至少再进行一次传递
如果您想要一个简洁的动画来可视化各种排序算法中发生的事情,请查看。动画很棒!非常感谢您的解释,非常有帮助!动画也很棒!谢谢你,你帮了我很大的忙!