在Ruby中使用冒号排序方法

ppr*_*yer 4 ruby ruby-on-rails bubble-sort ruby-on-rails-3 ruby-on-rails-3.1

我正在尝试将Bubble排序方法实现为Ruby的简单编码问题,但我遇到了一些麻烦.我理解的想法是查看第一个元素的值并将其与第二个元素的值进行比较,然后相应地交换它们,但我似乎无法在实际问题中这样做.有人愿意提供一个关于这在Ruby中如何工作的简短示例吗?

clu*_*luv 13

使用while循环正确实现冒泡排序

def bubble_sort(list)
  return list if list.size <= 1 # already sorted
  swapped = true
  while swapped do
    swapped = false
    0.upto(list.size-2) do |i|
      if list[i] > list[i+1]
        list[i], list[i+1] = list[i+1], list[i] # swap values
        swapped = true
      end
    end    
  end

  list
end
Run Code Online (Sandbox Code Playgroud)


ste*_*lag 6

arr = [4,2,5,1]
loop until arr.each_cons(2).with_index.none?{|(x,y),i| arr[i],arr[i+1] = y,x if x > y}
p arr #=> [1, 2, 4, 5]
Run Code Online (Sandbox Code Playgroud)


Chr*_*gis 2

来源

def bubble_sort(list)
  return list if list.size <= 1 # already sorted

  loop do
    swapped = false
    0.upto(list.size-2) do |i|
      if list[i] > list[i+1]
        list[i], list[i+1] = list[i+1], list[i] # swap values
        swapped = true
      end
    end
    break unless swapped
  end

  list
end
Run Code Online (Sandbox Code Playgroud)

尽管我肯定会推荐比冒泡排序运行时间更好的东西:)