pub fn gnome_sort<T: PartialOrd>(arr: &mut [T]) {
let len = arr.len();
let mut cursor = 1;
let mut anchor = cursor + 1;
// 走到最後一個排序完成
while cursor < len {
// 檢測到無序,向後檢查
if arr[cursor - 1] > arr[cursor] {
arr.swap(cursor - 1, cursor);
cursor -= 1;
if cursor == 0 {
cursor = 1;
}
} else {
// 有序以後跳轉到錨點繼續檢查
// 如果自然有序,錨點前進一步
cursor = anchor;
anchor += 1;
}
}
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結