1,学习冒泡排序
百度一份教程,比如说:http://c.biancheng.net/view/6506.html
至此,我们就知道了什么叫冒泡排序。
2,新建一个Cargo项目
命令行运行:
cargo init
效果:
至此,我们就有了一个可以写代码的地方。
3,函数:交换元素
参数:目标数组,索引A,索引B。
&的意思是,调用我不会失去所有权。
mut的意思是,我可以修改这个数组。
usize的意思是,无符号整数,数组的索引都是这个类型。
fn change(arr: &mut Vec<i32>, a: usize, b: usize) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
测试下:
扫描二维码关注公众号,回复:
13759834 查看本文章
fn main() {
let mut arr = vec![1, 2];
change(&mut arr, 0, 1);
for i in arr {
println!("{}", i)
}
}
效果:成功!
4,冒泡排序
先进行一次冒泡:
fn bubble(arr: &mut Vec<i32>) {
for i in 1..arr.len() {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
编写测试代码:
fn main() {
let mut arr = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr);
for i in arr {
print!("{}", i)
}
}
效果:1被安排到了末尾。
重复这个遍历,同时可以把末尾排除掉:
fn bubble(arr: &mut Vec<i32>) {
for j in 0..arr.len() {
for i in 1..arr.len() - j {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
}
效果:成功!
5,扩展:升序降序
就是多了一个参数:“asc”,“desc”
fn bubble(arr: &mut Vec<i32>, sort: &str) {
for j in 0..arr.len() {
for i in 1..arr.len() - j {
if sort.eq("asc") {
if arr[i].lt(&arr[i - 1]) {
change(arr, i, i - 1);
}
} else {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
}
}
6,全部代码
fn main() {
let mut arr = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr, "desc");
for i in arr {
print!("{}", i)
}
print!("\n");
let mut arr2 = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr2, "asc");
for i in arr2 {
print!("{}", i)
}
}
fn bubble(arr: &mut Vec<i32>, sort: &str) {
for j in 0..arr.len() {
for i in 1..arr.len() - j {
if sort.eq("asc") {
if arr[i].lt(&arr[i - 1]) {
change(arr, i, i - 1);
}
} else {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
}
}
fn change(arr: &mut Vec<i32>, a: usize, b: usize) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}