Rustlang-快速排序

pub fn partition(nums: &mut Vec<usize>, l: usize, r: usize) -> usize {
    let pivot = r; //基数的起始位置要和 第一个while起始下标相对.
    let mut i = l;
    let mut j = r;

    loop {
        while nums[i] < nums[pivot] {
            i += 1;
        }
        while nums[j] > nums[pivot] {
            j -= 1;
        }

        if i >= j {
            break;
        } else {
            nums.swap(i, j);
            //比如:3, 6, 5, 10, 1, 7
            //pivot = 7;
            //当前下标 nums[i=3]=10 ,nums[j=4]=7
            //交换完位置后两个下标需要切换到下一个数
            i += 1;
            j -= 1;
        }
    }
    nums.swap(i, pivot);
    i
}

pub fn quick_sort(nums: &mut Vec<usize>, l: usize, r: usize) {
    if l < r {
        let p = partition(nums, l, r);
        //println!("{:},{:},{:}", p, l, r);
        quick_sort(nums, l, p - 1);
        quick_sort(nums, p + 1, r);
    }
}
use crate::quick_sort;
fn do_work() {
        let mut nums = vec![3, 6, 5, 10, 1, 0];
        let len = nums.len() - 1;

        quick_sort(&mut nums, 0, len);
        println!("{:?}", &nums);
    }
posted @ 2022-01-19 10:25  blackTree  阅读(92)  评论(0编辑  收藏  举报