Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск
Алгоритм сортировки методом "пузырька". Дональд Э. Кнут. Ruby
# encoding: utf-8
# frozen_string_literal: true
#
# @author ESV Corp. (C) 21.09.2026
#
# алгоритм: сортировка методом "пузырька"
# Д. Кнут "Искусство программирования", т.3 "Сортировка и поиск",
# глава 5.2.2, раздел "Обменная сортировка"
#
# математически "метод пузырька" не считается эффективным,
# метод вставок эффективнее
#
# ---
# сортировка методом "пузырька"
def sort_bubble(list)
bound = list.size - 1
while bound > 0
t = 0
# с первого элемента до предпоследнего (относительно рассматриваемой границы ещё не отсортированных)
# после обмена элементов граница смещается
for j in 0...bound do
if list[j] > list[j+1]
list[j], list[j+1] = list[j+1], list[j]
t = j
end
end
bound = t
end
list
end
# ===
# основная программа
puts "Donald E. Knuth algorithm test: bubble"
src_list = [5, 3, 2, 7, 1, -5, 10, 4, -3, 0, 12, 6, 7, 9, 11, 8, 7, 20, -1]
# в процессе сортировки модифицируем исходный массив, поэтому нужна копия
list = src_list.dup
sorted_list = sort_bubble(list)
puts "source: #{src_list.inspect}"
puts "sorted: #{sorted_list.inspect}"