Rust——实现冒泡排序

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

猜你喜欢

转载自blog.csdn.net/qq_37284843/article/details/123881278