Article directory
1. Learn Bubble Sort
Baidu a tutorial, for example: http://c.biancheng.net/view/6506.html
So far, we know what is called bubble sort.
2. Create a new Cargo project
Command line run:
cargo init
Effect:
At this point, we have a place where we can write code.
3, function: swap elements
Parameters: target array, index A, index B.
& means that calling i will not lose ownership.
mut means, I can modify this array.
usize means that the unsigned integer, the index of the array is of this type.
fn change(arr: &mut Vec<i32>, a: usize, b: usize) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
Under test:
fn main() {
let mut arr = vec![1, 2];
change(&mut arr, 0, 1);
for i in arr {
println!("{}", i)
}
}
Effect: Success!
4. Bubble sort
Do a bubbling first:
fn bubble(arr: &mut Vec<i32>) {
for i in 1..arr.len() {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
Write test code:
fn main() {
let mut arr = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr);
for i in arr {
print!("{}", i)
}
}
Effect: 1 is arranged to the end.
Repeat this traversal while excluding the end:
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);
}
}
}
}
Effect: Success!
5. Extension: ascending descending order
Just one more parameter: "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. All codes
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;
}