|
初步入门Rust,跟着大咖学习Rust
算法逻辑(使用双循环):
1.外层循环控制排序轮数
2.内层循环比较相邻数据大小
3.使用一个标志位,表示当前轮排序是否有变动,若没有变动,数据已经有序,可以提前结束
简单粗暴,直接上code:
fn optimized_bubble_sort<T: PartialOrd>(arr: &mut [T]) {
let len = arr.len();
// 外层循环控制排序轮数
for i in 0..len {
// 设置标志位,表示本轮是否发生交换
let mut swapped = false;
// 内层循环比较相邻元素
for j in 0..len - i - 1 {
// 如果前一个元素比后一个大,则交换它们
if arr[j] > arr[j + 1] {
arr.swap(j, j + 1);
swapped = true;
}
}
// 如果本轮没有发生交换,说明数组已经有序,可以提前结束
if !swapped {
break;
}
}
}
fn main() {
// 测试整数
let mut numbers = [64, 34, 25, 12, 22, 11, 90];
println!("排序前数组: {:?}", numbers);
optimized_bubble_sort(&mut numbers);
println!("排序后数组: {:?}", numbers);
// 测试已经有序的数组
let mut already_sorted = [1, 2, 3, 4, 5];
println!("排序前数组: {:?}", already_sorted);
optimized_bubble_sort(&mut already_sorted);
println!("排序后数组: {:?}", already_sorted);
}
测试结果如下:
实验心得:
基本语法的学习,初步使用泛型写函数,极大提升了编写效率