//
// @author ESV Corp. (C) 12.09.2026
//
// "проба пера" на Rust
// алгоритм: "сортировка методом пузырька"
// Д. Кнут "Искусство программирования", т.3 "Сортировка и поиск",
// глава 5.2.2, раздел "Обменная сортировка"
//
// математически "метод пузырька" не считается эффективным,
// метод вставок эффективнее
//
// размер списка для сортировки
const N: usize = 20;
fn main() {
println!("Donald E. Knuth algorithms: sort list by bubble");
// исходный список элементов
let mut list: [i32; N] = [5, 14, 2, 7, 1, 13, -5, 10, 4, -3, 7, 0, 12, 6, 15, 9, 11, 8, 3, 12];
println!("source: {:?}", list);
sort_by_bubble(&mut list);
println!("sorted: {:?}", list);
}
fn sort_by_bubble(list: &mut [i32]) {
let mut bound: usize = list.len() - 1;
let mut t: usize;
while bound > 0 {
t = 0;
// с первого элемента до предпоследнего (относительно рассматриваемой границы ещё не отсортированных)
// после обмена элементов граница смещается
for j in 0..bound {
if list[j] > list[j+1] {
(list[j], list[j+1]) = (list[j+1], list[j]);
t = j;
}
}
bound = t;
#[cfg(debug_assertions)]
println!("top={}", t);
}
}