sort_library 0.1.1

A library for sorting algorithms in Rust
Documentation
pub fn merge_sort<T, F>(arr: &mut [T], compare: &F)
where
    T: Clone + Default,
    F: Fn(&T, &T) -> bool,
{
    let len = arr.len();
    if len <= 1 {
        return;
    }

    let mid = len / 2;
    let mut left = Vec::with_capacity(mid);
    let mut right = Vec::with_capacity(len - mid);

    for i in 0..mid {
        left.push(arr[i].clone());
    }
    for i in mid..len {
        right.push(arr[i].clone());
    }

    merge_sort(&mut left, compare);
    merge_sort(&mut right, compare);

    merge(arr, &left, &right, compare);
}

fn merge<T, F>(arr: &mut [T], left: &[T], right: &[T], compare: &F)
where
    F: Fn(&T, &T) -> bool,
    T: Clone + Default,
{
    let mut i = 0;
    let mut j = 0;
    let mut k = 0;

    while i < left.len() && j < right.len() {
        if compare(&left[i], &right[j]) {
            arr[k] = left[i].clone();
            i += 1;
        } else {
            arr[k] = right[j].clone();
            j += 1;
        }
        k += 1;
    }

    while i < left.len() {
        arr[k] = left[i].clone();
        i += 1;
        k += 1;
    }

    while j < right.len() {
        arr[k] = right[j].clone();
        j += 1;
        k += 1;
    }
}