pub fn stooge_sort(list: &[i32]) -> Result<Vec<i32>,String> {
if list.is_empty() {
return Err("Cannot use stooge sort on an empty input!".to_string());
}
let mut result = list.to_vec();
let end = result.len() - 1;
_stooge(&mut result, 0, end);
Ok(result)
}
fn _stooge(list: &mut [i32], low: usize, high: usize) {
if list[low] > list[high] {
list.swap(low,high);
}
if high - low + 1 > 2 {
let third = (high - low + 1) / 3;
_stooge(list, low, high - third);
_stooge(list, low + third, high);
_stooge(list, low, high - third);
}
}