rust-algorithms:4-鸡尾酒排序

pub fn cocktail_shaker_sort<T: Ord + std::fmt::Debug>(arr: &mut [T]) {
    let len = arr.len();
    if len < 2 {
        return ;
    }
    let mut left = 1;
    let mut right = len - 1;
    while left < right {
        let mut sorted = true;
        // 正向检测
        for index in left..right {
            if arr[index - 1] > arr[index] {
                arr.swap(index - 1, index);
                sorted = false;
            }
        }
        if sorted {
            break;
        }
        // 收缩边界
        right -= 1;
        sorted = true;
        // 反向检测
        for index in (left..right).rev() {
            if arr[index - 1] > arr[index] {
                arr.swap(index - 1, index);
                sorted = false;
            }
        }
        if sorted {
            break;
        }
        // 收缩边界
        left += 1;
    }

}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!