注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
米菲爸爸的个人空间 https://home.eeworld.com.cn/space-uid-1195957.html [收藏] [复制] [分享] [RSS]
日志

动手实践任务一 使用冒泡排序处理数组并打印

已有 45 次阅读2025-3-19 20:57 |个人分类:算法

函数 bubble_sort 是一个经典的冒泡排序算法实现。

冒泡排序的基本思想是,对于数组中的相邻元素,如果前一个元素大于后一个元素,就交换它们的位置。

这样一轮下来,最大的元素就会"冒泡"到数组的末尾。重复这个过程,直到整个数组有序。

 

1 函数接收一个可变的i32类型数组切片作为参数

2 首先获取数组的长度n

3 使用双重循环进行排序:

    外层循环(i)控制排序的轮数,每轮会将当前最大的元素"冒泡"到正确的位置

    内层循环(j)进行相邻元素的比较和交换,范围从0到n-i-1,因为每轮结束后最后的i个元素已经有序

4 如果发现前一个元素大于后一个元素(arr[j] > arr[j+1]),就交换它们的位置

5 最终,数组会按从小到大的顺序排列

这个算法的时间复杂度是O(n²),空间复杂度是O(1)。虽然它不是最高效的排序算法,但实现简单,适合教学和小规模数据排序。

 

// 冒泡排序函数,可变引用(&mut) :arr 是一个可变引用 可以修改传入的数组

在Rust中,可变引用(&mut)是一个非常重要的概念,它允许你在不转移所有权的情况下修改数据。

1 基本概念:

    可变引用使用 &mut 语法

    它允许你借用数据并对其进行修改

    同时确保内存安全

2 特点:

    可变性:可以修改引用的数据

    独占性:在同一个作用域内,只能有一个可变引用

    临时性:引用只在作用域内有效

3 与不可变引用的区别:

    不可变引用(&)只允许读取数据

    可变引用(&mut)允许读取和修改数据

4 使用场景:

    当需要修改数据但不想转移所有权时

    在函数参数中传递需要修改的数据

    在需要高效修改大型数据结构时

5 内存安全保证:

    Rust编译器会确保不会同时存在可变引用和不可变引用

    防止数据竞争

 

fn bubble_sort(arr: &mut [i32]) {
    let n = arr.len();
    for i in 0..n {
        for j in 0..n-i-1 {
            if arr[j] > arr[j+1] {
                arr.swap(j, j+1);
            }
        }
    }
}

fn main() {
    let mut numbers = [64, 34, 25, 12, 22, 11, 90];
    println!("排序前: {:?}", numbers);
    
    bubble_sort(&mut numbers);
    println!("排序后: {:?}", numbers);
}

 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章