算法 -- 冒泡排序

一、定义

通过相邻元素的比较与交换,将较大的元素逐步「冒泡」到数组末尾,较小的元素自然「下沉」到数组开头。

二、算法步骤

步骤1:比较相邻元素

从数组的第一个元素开始,比较当前元素和下一个元素。

步骤2:交换元素

如果当前元素大于下一个元素(升序排序),交换它们的位置。

步骤3:移动指针

向后移动一个位置,继续比较下一对相邻元素。

步骤4:完成一轮

重复步骤1-3,直到达到数组末尾。此时最大的元素已经在正确位置。

步骤5:重复

对剩下的未排序元素重复上述过程,直到整个数组有序。

三、代码实现

复制代码
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        
        System.out.println("排序前: " + Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println("排序后: " + Arrays.toString(arr));
    }
    
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        
        // 外层循环控制轮数
        for (int i = 0; i < n - 1; i++) {
            // 内层循环进行相邻元素比较和交换
            for (int j = 0; j < n - 1 - i; j++) {
                // 如果前一个元素大于后一个元素,交换它们
                if (arr[j] > arr[j + 1]) {
                    // 交换元素
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            
            // 打印每轮排序结果
            System.out.println("第" + (i + 1) + "轮: " + Arrays.toString(arr));
        }
    }
}

四、算法分析

指标 复杂度 说明
最佳时间复杂度 O(n) 数组已有序,只需一趟遍历
最坏时间复杂度 O(n2) 数组逆序,需要 n 趟遍历
平均时间复杂度 O(n2) 一般情况下的复杂度
空间复杂度 O(1) 原地排序,只使用常数空间
稳定性 稳定 相等元素相对位置不变

五、算法特点

优点:

  1. 简单易懂:逻辑清晰,容易实现

  2. 稳定排序:相等元素的相对位置不变

  3. 原地排序:不需要额外空间

  4. 适应性:对已部分有序的数组效率高

缺点:

  1. 效率低:O(n²)的时间复杂度

  2. 不适合大数据:数据量大时性能差

  3. 多次交换:每轮可能需要多次交换操作

相关推荐
wuweijianlove19 分钟前
算法性能的渐近与非渐近行为对比的技术4
算法
_dindong28 分钟前
cf1091div2 C.Grid Covering(数论)
c++·算法
AI成长日志28 分钟前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
黎阳之光1 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
skywalker_111 小时前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
wfbcg2 小时前
每日算法练习:LeetCode 209. 长度最小的子数组 ✅
算法·leetcode·职场和发展
_日拱一卒2 小时前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾2 小时前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
SatVision炼金士2 小时前
合成孔径雷达干涉测量(InSAR)沉降监测算法体系
算法