Rust - Implementing Bubble Sort

1. Learn Bubble Sort

Baidu a tutorial, for example: http://c.biancheng.net/view/6506.html

insert image description here

So far, we know what is called bubble sort.

2. Create a new Cargo project

Command line run:

cargo init

Effect:

insert image description here
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!

insert image description here

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.

insert image description here
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!

insert image description here

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;
}

Guess you like

Origin blog.csdn.net/qq_37284843/article/details/123881278