首页 > 解决方案 > 请帮我解释如何在不使用 Array#sort Ruby 的情况下对数组进行排序

问题描述

bubble_sort 方法应该接受一个数字数组并按升序排列元素。该方法应返回数组。我了解交换部分,但并不真正了解真假的翻转以及它们最初存在的原因。最好逐行解释以帮助我理解这一点。

不要使用内置Array#sort

def bubble_sort(arr)
    sorted = false

    while !sorted
        sorted = true
        (0...arr.length-1).each 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


p bubble_sort([2, 8, 5, 2, 6])      # => [2, 2, 5, 6, 8]
p bubble_sort([10, 8, 7, 1, 2, 3])  # => [1, 2, 3, 7, 8, 10]

标签: ruby

解决方案


你交换一些东西的原因你知道数组还没有排序。在已经排序的数组中,你永远不会交换任何东西。sorted = false只是记录了这个事实。


推荐阅读