当前位置: 首页 > news >正文

冒泡排序笔记

核心思想

通过相邻元素的比较和交换,使较大的元素逐渐“浮”到数组的末尾(像气泡从水底冒到水面一样)

基础冒泡排序

public class BubbleSort{
  public static void bubbleSort(int[] arr){
    for(int i = 0; i  < arr.length - 1; i++){//冒泡的次数,总数-1
      for(int j = 0; j < arr.length - 1 - i; j++){//比较相邻的数
        if(arr[j] > arr[j+1]){
          swap(arr, j, j+1);
        }
      }
    }
  }

  public static void swap(int[] arr, int a, int b){
    int temp = arr[a];
    int[a] = int[b];
    int[b] = temp;
  }
}

时间复杂度

  • 最坏情况(完全逆序):O(n²)
  • 最好情况(已有序):O(n²)(即使有序,仍然会完整遍历)

空间复杂度:O(1)

稳定性:稳定

优化版冒泡排序

优化思路

所谓优化,就是数据已经排好序的情况下提前终止冒泡排序。

判断的依据就是,当某一轮的尝试“冒泡”的过程中,如果发现数据并没有进行交换,那么这时候就直接结束排序过程。

优化代码
public class OptimizedBubbleSort{
  public static optimizeBubbleSort(int[] arr){
    int n = arr.length;
    boolean swapped ;
    for(int i = 0; i < n -1; i++){
      swapped = false;
      for(int j = 0; j < n - 1- i; j++){
        if(arr[j] > arr[j+1]){
          swapped = true;
          swap(arr, j , j+1);
        }
      }
      if(!swapped) return;
    }
  }

    public static void swap(int[] arr, int a, int b){
    int temp = arr[a];
    int[a] = int[b];
    int[b] = temp;
  }
}

时间复杂度

  • 最坏情况(完全逆序)O(n²)
  • 最好情况(已有序)O(n)(即使有序,仍然会完整遍历)

相关文章:

  • JavaScript学习17-Element获取元素
  • ansible角色 role
  • adb检测不到原来的设备List of devices attached解决办法
  • ROS创建工作空间
  • SAP学习笔记 - 豆知识17 - MRRL里面出 Msg番号 M8240 - 没有番号范围 错误
  • MCP 实战:实现server端,并在cline调用
  • 日志乱码<0x1b>[0;39m]中文乱码<DE><EA><DA>
  • 一种用于扩散磁共振成像(MRI)中多纤维参数估计和不确定性量化的深度学习方法|文献速递-深度学习医疗AI最新文献
  • jmeter接口自动化测试框架
  • 更改vs下的x86与x64的库平台
  • 解决Centos7集成IDEA报git版本太低问题
  • 86.方便的double转string属性 C#例子 WPF例子
  • Flutter之页面布局
  • 2.2 路径问题专题:LeetCode 63. 不同路径 II
  • 域名证书和 SSL 证书一样的吗?有什么区别呢
  • AI比人脑更强,因为被植入思维模型【40】九宫格思维模型
  • Spring Boot添加全局异常处理器捕捉异常 跳转登录页面
  • 2025 最新版HM程序员软件测试学习路线图
  • linux远程服务器传输文件
  • 激光模拟单粒子效应试验如何验证CANFD芯片的辐照阈值?