Элемент массива с индексом j+1
не может быть найден при итерации по массиву с .each_with_index
. j+1
возвращает nil
, а затем вы пытаетесь сравнить его с arr[j]
, что вызывает ошибку аргумента.
.each_with_index
здесь бесполезен, так как вы используете только индексы. И вам нужно снова запустить проверку, если найдены несортированные значения.
Я предлагаю использовать цикл от 0 до последнего возможного значения индекса. Примерно так:
def bubble_sort(arr)
index = 0
while index < arr.size - 1 do
if arr[index] > arr[index+1]
arr[index], arr[index+1] = arr[index+1], arr[index]
index = 0
else
index += 1
end
end
print arr
end
bubble_sort([4,3,78,2,0,2]) # => [0, 2, 2, 3, 4, 78]