其他分享
首页 > 其他分享> > Rustlang-快速排序

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);
    }

标签:sort,mut,nums,let,usize,pivot,排序,快速,Rustlang
来源: https://www.cnblogs.com/blackTree/p/15821197.html