rust-algorithms:7-地精排序

Rust
343
0
0
2022-11-10
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;
        }
    }
}