在ruby中使用冒泡排序方法排序

时间:2014-10-15 11:26:59

标签: ruby arrays sorting

为什么我们需要对以下代码的真值和假值进行排序?

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

1 个答案:

答案 0 :(得分:2)

当没有交换的传递时,冒泡排序终止。此代码通过假定列表已排序来启动传递:

sorted = true

但是,如果进行了交换,则确定列表之后没有排序:

if arr[i]  > arr[i + 1]
  arr[i], arr[i + 1] = arr[i + 1], arr[i]
  sorted = false
end

在某种程度上,这个变量的名称是一个谎言,只是片刻:在倒数第二次传递之后,进行任何交换的最后一次传递,"排序"即使数组已完全排序,也为false。最后一个遍历,即遍历排序数组的那个,然后将设置" sorted"为真。