Cайт программиста Ruby, веб-разработчика Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

Алгоритм сортировки методом "пузырька". Дональд Э. Кнут. Rust

//
// @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);
    }
}