在Ruby中,有没有一种方法可以使用while循环并使用any方法来进行冒泡排序算法?

问题描述 投票:0回答:2

我正在尝试使用while循环和任何可枚举的方式来优化冒泡排序算法,但是在想办法使之工作时遇到了麻烦。现在,我遇到了一个错误,但是我想知道从概念上讲我是否走在正确的轨道上?

我附上了一些示例,这些代码应该返回以便获得更好的上下文。

def bubble_sort(arr)
    while arr.any? { |ele, idx| ele > arr[idx + 1] }
        if arr[idx] > arr[idx + 1]
            arr[idx], arr[idx + 1] = arr[idx + 1], arr[idx]
        end
    end
    return 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 bubble-sort enumerable
2个回答
1
投票
def bubble_sort(arr)
  length = arr.length

  (0..length-2).each do |i|
    (0..(length-i-2)).each do |j|
      if arr[j] > arr[j+1]
        arr[j+1], arr[j] = arr[j], arr[j+1]
      end
    end
  end

  arr
end

0
投票
def bubble_sort(arr)
  sorted = false
  while !sorted
    did_a_swap = false
    arr.each_index do |idx|
      next unless arr[idx + 1]
      if arr[idx] > arr[idx + 1]
        did_a_swap = true
        arr[idx], arr[idx + 1] = arr[idx + 1], arr[idx]
      end
    end
    sorted = !did_a_swap
  end
  return 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]

如果您接受每次至少有一个未排序对时都对数组进行完整遍历,则可以使用while !sorted并将sorted定义为此运行是否有零交换?]?] >

© www.soinside.com 2019 - 2024. All rights reserved.