运行 通过 Ruby 冒泡排序
Running Through a Ruby Bubble Sort
我正在 Ruby 上编写冒泡排序代码作为初学者 class 的一部分。我知道 (array.length - 1).times do |i|
是不好的做法,因为我不需要每次都 运行 数组的末尾。 (在我的示例中,[5,4,3,2,1] 5 在第一个 运行 期间移动到末尾,四在第二个结束时位于正确的位置,等等,所以无需再次检查这些数字):
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])
有没有一种巧妙的方法来告诉方法每次少检查一个数组元素?
外层循环加一个变量j
,array.length - 1
减去j怎么样?
看起来像这样:
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])
我正在 Ruby 上编写冒泡排序代码作为初学者 class 的一部分。我知道 (array.length - 1).times do |i|
是不好的做法,因为我不需要每次都 运行 数组的末尾。 (在我的示例中,[5,4,3,2,1] 5 在第一个 运行 期间移动到末尾,四在第二个结束时位于正确的位置,等等,所以无需再次检查这些数字):
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])
有没有一种巧妙的方法来告诉方法每次少检查一个数组元素?
外层循环加一个变量j
,array.length - 1
减去j怎么样?
看起来像这样:
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])