rust
눈_눈 axe
myblog:https://www.cnblogs.com/militray-axe/
展开
-
rust 链表 非递归
简单写了一下rust链表的一些基本操作,append,delete之类的熟悉一下rust之间的借用,和巧用.take()方法。append是用递归的思路,delete使用非递归的。不得不说,非递归的写法很头痛。要考虑到删除头节点和尾节点的情况,所以看起来有点复杂use std::fmt::Debug;type List<T> = Option<Box<Node<T>>>;#[derive(Debug)]struct Node<T>原创 2021-08-12 15:17:56 · 153 阅读 · 1 评论 -
Rust kmp算法
只实现kmp算法的思想,数据类型没有弄成String,一方面是String类型不能直接索引,另一方面也是懒。这个其实不难,处理下数据类型,不嫌弃的话直接用Vec就可以了fn kmp(s: Vec<i32>, p: Vec<i32>) -> (bool, usize) { let length_p = p.len(); let mut next = vec![0]; // 生成next数组 for i in 1..length_p {原创 2021-06-23 23:47:10 · 178 阅读 · 0 评论 -
rust 双轴快排 非递归
rust 双轴快排迭代法思路是用一个Vec当作栈来模拟保存快排的左右边界,思路来自这篇文章,文章只有普通快排,我改成双轴的实现partion 函数还是我上篇写的rust双轴快排的函数,只是调用partion的quick_sort_iter函数变了,用栈的方式模拟函数而已fn partion(v: &mut Vec<i32>, l: usize, r: usize) -> (usize, usize) { if v[l] > v[r] { v.sw原创 2021-06-15 10:33:16 · 159 阅读 · 0 评论 -
rust 归并排序 迭代
Rust 归并排序 迭代参考大佬们的写法写了一个rust版。这个迭代(非递归)妙就妙在它创建啦一个栈来保存左右两个边界,类似模拟了递归的操作。实际上开销肯定是低于递归写法的。fn merge(v: &mut Vec<i32>,left: usize,middle: usize,right: usize){ let mut tmp = Vec::new(); let mut l = left; let mut r = middle; while l&l原创 2021-06-08 11:31:31 · 227 阅读 · 1 评论 -
rust 斐波那契查找
rust 斐波那契查找flags数组三个值其实是左边界,fib数组的当前index值,右边界。中间那个换成中间值其实更好,懒得换就直接声明一个middle了fn fibonacci(n: usize) -> usize { if n < 2 { return n; } let mut fib = (1, 1); for _ in 2..n { fib = (fib.1, fib.0 + fib.1); } fi原创 2021-06-08 11:26:19 · 77 阅读 · 0 评论 -
2021-06-05
Rust 基数排序参数是数组,改成Vec也可以,中间实现比较垃圾,凑合用use std::collections::VecDeque;fn radix_sort(v:&mut [i32]){ let lenght = v.len(); let max = *v.iter().max().unwrap(); let mut digit = 1; let radix = 10; let mut matrix = Vec::new(); for _原创 2021-06-05 13:45:28 · 76 阅读 · 0 评论 -
2021-06-03
Rust 计数排序author : mi1itray.axewebsite: military-axe.github.io具体实现中,我clone了原数组一份,来排序原来的数组。也可以不clone原数组,转而申明一个vec去计数。看个人选择fn counting_sort(v: &mut Vec<i32>) { let max = *v.iter().max().unwrap() + 1; let v_clone = v.clone(); let mu原创 2021-06-03 17:01:03 · 65 阅读 · 0 评论 -
2021-06-03
Rust 双轴快排author: Mi1itray.axeWebsite: military-axe.github.io思路都是双轴快排的思路。需要注意的是。我把最左边的数做第一个轴,最右边的数做第二个轴由于遍历是从左往右便利,右边的数还没有比较,就有可能会和已经比较的数交换,导致可能某些数没比较就过了。所以这里在判断右边的轴下面再加入一个循环codefn quick_sort(v: &mut Vec<i32>) { let (l, r) = (0, v.len(原创 2021-06-03 09:22:52 · 77 阅读 · 0 评论