冒泡排序
算法随笔
深入理解二分查找算法的不同应用场景
核心思想: 重复地遍历列表,比较每对相邻的元素。如果它们的顺序不对(比如从小到大排序时,前一个比后一个大),就交换它们的位置。每完成一次完整的遍历,最大的那个元素就会被“冒”到正确的位置(末尾)。
这个过程会一直重复,直到没有任何一对元素需要交换,这说明整个列表已经有序了。
// 需注意由于整个算法过程需要对数组进行重排,故需要可变
fn bubble_sort(arr: &mut Vec<i32>) {
// 获取数组的长度
let n = arr.len();
// 外层循环:控制遍历的轮数
// 我们至多只需要 n-1 轮就可以完成排序
for i in 0..n {
// 内层循环:进行相邻元素的比较和交换
// 每一轮结束后,末尾的元素已经就位,所以下一次内层循环可以少比较一次
for j in 0..(n - i - 1) {
// 逐一按序比较相邻元素
// 如果 arr[j] 大于 arr[j+1],就交换它们
if arr[j] > arr[j + 1] {
// 使用 Rust 的 `swap` 方法进行交换
arr.swap(j, j + 1);
}
}
}
}
冒泡排序虽然直观,但效率并不高(时间复杂度为 $O(n^2)$)
这是一个公式: $O(n^2)$
好吧,公式渲染看来还有点问题,bug++
标签
# 算法
# 冒泡排序
# 数据结构
# 编程