pub fn stooge_sort<T: Ord>(arr: &mut [T]) {
if arr.len() > 1 {
stooge_sort_range(arr, 0, arr.len() - 1);
}
}
fn stooge_sort_range<T: Ord>(arr: &mut[T], begin: usize, end: usize) {
// 避免end = start + 1
if arr[begin] > arr[end] {
arr.swap(begin, end);
}
if end - begin > 1 {
// 數值,而非間距,需要+1
let one_third = (end - begin + 1) / 3;
// 前2/3
stooge_sort_range(arr, begin, end - one_third);
// 後1/3
stooge_sort_range(arr, begin + one_third, end);
// 前2/3
stooge_sort_range(arr, begin, end - one_third)
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結