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