ded*_*ith 5 ruby arrays bubble-sort
我正在编写冒泡排序代码,作为 Ruby 初学者课程的一部分。我知道这 (array.length - 1).times do |i|是不好的做法,因为我不需要每次都跑到数组的末尾。(在我的例子中,[5,4,3,2,1] 5 在第一次运行时移到最后,在第二次结束时 4 移动到正确的位置,等等,所以没有必要再次检查这些数字):
def bubble_sort(array)
(array.length - 1).times do
(array.length - 1).times do |i|
array[i], array[i+1] = array[i+1], array[i] if array[i] > array[i+1]
end
end
end
bubble_sort([5,4,3,2,1])
Run Code Online (Sandbox Code Playgroud)
有没有一种巧妙的方法来告诉该方法每次检查少一个数组元素?
j在外循环中添加一个变量并从中减去 j 怎么样array.length - 1?
它看起来像这样:
def bubble_sort(array)
(array.length - 1).times do |j|
(array.length - 1 - j).times do |i|
array[i], array[i+1] = array[i+1], array[i] if array[i] > array[i+1]
end
end
end
bubble_sort([5,4,3,2,1])
Run Code Online (Sandbox Code Playgroud)