use crate::collections::vec_range_midpoint;
fn merge(x: Vec<isize>, y: Vec<isize>) -> Vec<isize> {
let mut merged: Vec<isize> = Vec::new();
let mut x_index = 0;
let mut y_index = 0;
while x_index < x.len() && y_index < y.len() {
if x[x_index] <= y[y_index] {
merged.push(x[x_index]);
x_index += 1;
} else {
merged.push(y[y_index]);
y_index += 1;
}
}
for element in x[x_index..].to_vec() {
merged.push(element);
}
for element in y[y_index..].to_vec() {
merged.push(element);
}
merged
}
pub fn sort(x: Vec<isize>) -> Vec<isize> {
if x.len() <= 1 {
return x;
}
let midpoint = vec_range_midpoint(&x);
let a = &x[..midpoint];
let b = &x[midpoint..];
let c = sort(a.to_vec());
let d = sort(b.to_vec());
merge(c, d)
}