rust使用trait排序

编程入门 行业动态 更新时间:2024-10-28 14:29:11

<a href=https://www.elefans.com/category/jswz/34/1762214.html style=rust使用trait排序"/>

rust使用trait排序

//Sort行为... 类似go的接口, 不过感觉还是泛型在某些方面舒服,虽然代码多一点...
trait Sort {fn less(&self,a:usize, b:usize) -> bool; //大小fn len(&self) -> usize; // 长度fn swap_by_index(&mut self,a:usize, b:usize); //交换
}//vec泛型...
impl<T> Sort for Vec<T> where T:std::cmp::PartialOrd{fn less(&self,a:usize, b : usize) ->bool { &self[a] < &self[b]}fn len(&self) -> usize {self.len()}fn swap_by_index(&mut self,a:usize, b : usize) {self.swap(a,b);}
}fn sort(s : &mut Sort) {let l = s.len()-1;quick_sort_trait(s,0,l);
}
fn quick_sort_trait( arr:&mut Sort, a:usize,b : usize){if a<b {if b-a < 20 {insert_sort_Sort(arr,a,b);}else{let p = partion_trait(arr,a,b);if p != 0 {quick_sort_trait(arr,a,p-1); //无符号整数...越界}quick_sort_trait(arr,p+1,b);}}
}fn insert_sort_Sort(arr: &mut Sort,a:usize, b : usize) {let mut i:usize;for j in a+1..b+1 {i= j;while i>a&& arr.less(i,i-1) { // self.less()变成了less(&self)???arr.swap_by_index(i,i-1);i-=1;}}
}
fn partion_trait( arr :&mut Sort, p:usize,r:usize)->usize { let mut i = p;for j in p..r {if arr.less(j,r) {  //注意是与主键比较arr.swap_by_index(i, j);i+=1;}}arr.swap_by_index(i,r);i
}fn main() {let mut rag = rand::thread_rng();let mut a  = vec![]; //暂时不指定类型for _j in 0..10 {let tmp:u8 = rag.gen(); //产生随机数let person = Person::new(tmp); //创建结构体a.push(person);}// for i in &a { //引用, 不释放空间//     println!("原始数据{:#?}",i)// }// quicksort(&mut a);sort(&mut a);for i in &a { //引用, 不释放空间println!("{:#?}",i.age);}}

更多推荐

rust使用trait排序

本文发布于:2023-07-28 16:29:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1250230.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:rust   trait

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!