冒泡排序解决方案

时间:2015-01-19 22:47:41

标签: 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
  end

  arr
end

我在理解术语"排序"时遇到了一些麻烦。在这里做我知道有一个.sort方法,但我找不到任何已排序的方法,并且不完全清楚循环如何知道如何结束。

有人可以解释一下术语"排序"会发生什么吗?

2 个答案:

答案 0 :(得分:0)

它不是一种方法,它是一个局部变量。特别是,这些类型的变量称为标志。它在相对较少数量的替代值之间切换以保持算法的内部状态。在这种情况下,它会在falsetrue之间切换,用于控制是否从until循环中退出。

答案 1 :(得分:0)

sorted是一个布尔变量,用于指示排序是否完整。

最初,sorted设置为false(假设数组尚未排序)。主(外部)循环上的条目条件检查sorted是真还是假,如您所见,循环继续,直到sorted为真。

每次通过外循环,sorted开始被设置为true。但是内部循环检查数组中是否有任何值不正确的序列,如果不是,则交换它们,并将sorted设置为false。

只有当内部循环遍历整个数组而不需要交换任何值时,sorted仍然为真且外部循环退出。