Mushroom Notes Mushroom Notes
🍄首页
  • JavaSE

    • 基础篇
    • 数据结构
    • IO流
    • Stream流
    • 函数式接口
    • JUC
    • 反射
    • 网络编程
    • 设计模式
  • JavaEE

    • Servlet
    • JDBC
    • 会话技术
    • 过滤器监听器
    • 三层架构
  • JDK

    • 总览
  • JVM

    • 总览
  • 常用mate
  • CSS
  • JavaScript
  • rds 数据库

    • MySQL
    • MySQL 进阶
    • MySQL 库表规范
  • nosql 数据库

    • Redis
    • Redis 进阶
    • Redis 底层
    • MongoDB
  • Spring生态

    • Spring
    • Spring MVC
    • Spring boot
    • Spring Validation
  • Spring Cloud生态

    • Spring Cloud
    • 服务治理
    • 远程调用
    • 网关路由
    • 服务保护
    • 分布式事务
    • 消息中间件
  • 数据库

    • Mybatis
    • Mybatis Plus
    • Elasticsearch
    • Redisson
  • 通信

    • Netty
📚技术
  • 方案专题
  • 算法专题
  • BUG专题
  • 安装专题
  • 网安专题
  • 面试专题
  • 常用网站
  • 后端常用
  • 前端常用
  • 分类
  • 标签
  • 归档

kinoko

一位兴趣使然的热心码农
🍄首页
  • JavaSE

    • 基础篇
    • 数据结构
    • IO流
    • Stream流
    • 函数式接口
    • JUC
    • 反射
    • 网络编程
    • 设计模式
  • JavaEE

    • Servlet
    • JDBC
    • 会话技术
    • 过滤器监听器
    • 三层架构
  • JDK

    • 总览
  • JVM

    • 总览
  • 常用mate
  • CSS
  • JavaScript
  • rds 数据库

    • MySQL
    • MySQL 进阶
    • MySQL 库表规范
  • nosql 数据库

    • Redis
    • Redis 进阶
    • Redis 底层
    • MongoDB
  • Spring生态

    • Spring
    • Spring MVC
    • Spring boot
    • Spring Validation
  • Spring Cloud生态

    • Spring Cloud
    • 服务治理
    • 远程调用
    • 网关路由
    • 服务保护
    • 分布式事务
    • 消息中间件
  • 数据库

    • Mybatis
    • Mybatis Plus
    • Elasticsearch
    • Redisson
  • 通信

    • Netty
📚技术
  • 方案专题
  • 算法专题
  • BUG专题
  • 安装专题
  • 网安专题
  • 面试专题
  • 常用网站
  • 后端常用
  • 前端常用
  • 分类
  • 标签
  • 归档
  • 方案专题

  • 算法专题

    • 二分查找
    • 第一个错误的版本
    • 有序数组的平方
    • 轮转数组
    • 移动零
    • 两数之和 - 输入有序数组
    • 翻转数组
    • 冒泡排序
    • 选择排序
    • 打印随机数、不重复
    • 验证码生成
    • 找零问题 - 全打印
    • 记录元素在数组中出现的次数
    • 反转字符串中的单词
    • 最长回文串
  • BUG专题

  • 安装专题

  • 网安专题

  • 面试专题

  • 专题
  • 算法专题
kinoko
2023-12-19

冒泡排序

需求

将无序数组通过方法变成有序数组

示例

[5, 1, 2, 8, 3, 9, 10, 6, 4, 7]
-------------------------------
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1
2
3

思路

依次比较数组中相邻两个元素大小,若a[j]>a[j+1],则交换两个元素,两两都比较一遍称为一轮冒泡,结果是让最大的元素排至最后,最小的元素排至最前,重复这个步骤,直至数组有序。

优化方式

在一轮冒泡中,若没有发生交换,则说明当前索引停留的位置以后的元素已有序,所以每轮冒泡结束可以将最后一次交换的索引作为下一次冒泡的比较次数,如果这个值为0,表示整个数组有序,直接退出外层循环即可。

前面的元素比后面的元素大就交换位置,反复交换,直至大的在数组后面,小的在数组前面,以此达到数组有序

代码

    public static void bubble(int[] arr) {
        int n = arr.length - 1;
        while (true) {
            int last = 0;//记录最后一次交换位置的下标
            for (int i = 0; i < n; i++) {
                if (arr[i] > arr[i + 1]) {
                    swap(arr, i, i + 1);
                    last = i;
                }
            }
            n = last;//缩小遍历范围,减少比较次数
            //当最后一次交换的下标在0索引时,代表没有发生交换
            if (n == 0) {
                break;//结束循环
            }
        }
    }

    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#算法#排序
上次更新: 2023/12/29 11:32:56
翻转数组
选择排序

← 翻转数组 选择排序→

最近更新
01
JVM 底层
09-13
02
JVM 理论
09-13
03
JVM 应用
09-13
更多文章>
Theme by Vdoing | Copyright © 2022-2024 kinoko | MIT License | 粤ICP备2024165634号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式