Алгоритм сортировки слиянием в Rust: реализация и пример кода

Я могу объяснить вам алгоритм сортировки слиянием в Rust и привести пример кода.

Алгоритм сортировки слиянием — это алгоритм «разделяй и властвуй», который работает путем рекурсивного разделения входного массива на более мелкие подмассивы, их сортировки, а затем обратного слияния для создания отсортированного выходного массива. Вот реализация сортировки слиянием в Rust:

fn merge_sort<T: Ord + Clone>(arr: &mut [T]) {
    let len = arr.len();
    if len < 2 {
        return;
    }
    let mid = len / 2;
    merge_sort(&mut arr[0..mid]);
    merge_sort(&mut arr[mid..len]);
    let mut merged: Vec<T> = Vec::with_capacity(len);
    let (mut i, mut j) = (0, mid);
    while i < mid && j < len {
        if arr[i] <= arr[j] {
            merged.push(arr[i].clone());
            i += 1;
        } else {
            merged.push(arr[j].clone());
            j += 1;
        }
    }
    while i < mid {
        merged.push(arr[i].clone());
        i += 1;
    }
    while j < len {
        merged.push(arr[j].clone());
        j += 1;
    }
    arr.copy_from_slice(&merged);
}

Чтобы использовать эту реализацию сортировки слиянием, вы можете вызвать функцию merge_sortи передать изменяемую ссылку на массив, который вы хотите отсортировать. Вот пример использования:

fn main() {
    let mut arr = [4, 2, 9, 5, 1, 6, 3, 8, 7];
    merge_sort(&mut arr);
    println!("{:?}", arr);
}

Это выведет отсортированный массив: [1, 2, 3, 4, 5, 6, 7, 8, 9].