1. 图示过程

2. 动图展示

3. 文字叙述过程

对于一组包含n个数据的记录,冒泡排序在最坏的情况下需要进行n-1趟排序

第1趟:依次比较0和1、1和2、2和3...(n-2)和(n-1)索引的元素,如果发现第1个数据大于第2个数据,交换他们,经过第1趟排序,最大的元素排到了最后

第2趟:依次比较0和1、1和2、2和3...(n-3)和(n-3)索引的元素,如果发现第1个数据大于第2个数据,交换他们,经过第2趟排序,第二大的元素排到了倒数第二个位置

...

第n-1趟:比较0和1索引的元素,如果发现第1个数据大于第2个数据,交换他们,经过第n-1趟排序,第二小的元素排到了第二个位置

4. Java代码实现

public static void bubbleSort(int[] arr) {

if (arr == null || arr.length < 2) {

return;

}

for(int i = arr.length - 1; i > 0; i--) {

for(int j = 0; j < i; j++) {

if(arr[j] > arr[j + 1]) {

swap(arr, j, j + 1);

}

}

}

}

public static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

5. 复杂度

时间复杂度:O(n²)

空间复杂度:O(1),只需要一个额外空间用于交换

稳定性:冒泡排序是稳定的排序算法,因为可以实现值相等的元素的相对位置不变,例如我们上面的代码中,if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); } ,只有当arr[j] > arr[j + 1]的时候才交换,这时候就是稳定的,假如写成if (arr[j] >= arr[j + 1]) { swap(arr, j, j + 1); },冒泡排序的功能还是可以实现,但是值相等的元素的相对位置发生了改变,此时就是不稳定的。

6. 优化

在上面实现的代码中,即使n个数本来就是有序的,也会进行(n-1)次排序(只比较,不交换)

优化:当某趟没有发生交换,说明数组已经有序,就中断程序

public static void bubbleSort(int[] arr) {

if (nums == null || nums.length < 2) {

return;

}

for (int i = arr.length - 1; i > 0; i--) {

boolean swapped = false;

for (int j = 0; j < i; j++) {

if (arr[j] > arr[j + 1]) {

swap(arr, j, j + 1);

swapped = true;

}

}

if(!swapped) {

break;

}

}

}

java冒泡排序图解_[图解] 冒泡排序相关推荐

  1. java 桶排序_[图解] 桶排序

    桶排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序都是基于比较的排序,而桶排序提出了一种新的思路,即基于数据状态的排序. 1. 桶排序的 ...

  2. 图解数据结构使用java电子书下载_图解数据结构:使用Java 胡昭民著 PDF下载

    本书内容架构完整,逻辑清楚,采用丰富的图例来阐述基本概念及应用.强调边做边学,结合下载文件,给予最完整的支援.以Java程序语言实现数据结构中的重要理论,以范例程序说明数据结构的内涵.采用JavaID ...

  3. java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...

    大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 转载文章请保留以下声明: 一:存储模式 留言或私信我,邀请你加入"图数据库交流"微信群! 1. ...

  4. java内存图解_图解JAVA内存模型(JMM:JAVA Memory Model)

    本文主要说明两个问题:JMM存在的意义是什么?JMM内部的工作原理是什么(重点讲一下并发编程模式下的数据访问一致性问题) . 1.为什么要使用JMM? 当我们刚开始接触JAVA语言的时候,就会被告知J ...

  5. java 数组 内存_图解Java数组的内存分配

    1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books ...

  6. java简单数据结构_图解Java常用数据结构

    最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList ...

  7. java 矩阵转置_图解利用Java实现数组转置

    我们编写Java代码,如下图所示: package com.tina; public class demo { public static void main(String args[]) { int ...

  8. java内聚 耦合_图解高内聚与低耦合,傻瓜都能看懂!

    作者:大道方圆 来源:www.cnblogs.com/xdecode/p/9393885.html 模块 模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决 ...

  9. rsatool使用步骤图解_图解360系统重装大师如何使用

    电脑使用久了就会出现这样或那样的问题,比如运行卡顿,浏览速度下降的现象,该怎么办呢?实际上只要借助重装软件,就可以轻松解决电脑卡顿的问题了.那要怎么使用360系统重装大师呢?今天,小编给大家带来了36 ...

  10. python计算图解_图解NumPy,看这一篇就够了!

    晓查 编译整理 量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近,国 ...

最新文章

  1. openssl md5算法 —— Linux下(字符串加密、文件加密)
  2. 一个 NAND flash写函数
  3. 偏最小二乘法回归(Partial Least Squares Regression)
  4. static 应用php,PHP static的一例应用
  5. openssl与cryptoAPI交互AES加密解密
  6. Hadoop官方文档翻译——MapReduce Tutorial
  7. 【视频回放】Best of Build Tour in China 暨 Watching Party - 大湾区专场
  8. jquery 获得table 行数
  9. 华为补助武汉员工,最高每日 2000 元;iPhone SE 2 量产或推迟;PowerShell 7.0 发布 | 极客头条...
  10. 前端安全究竟该怎么做?从一个安全漏洞说起......
  11. Oracle IO问题解析(一)
  12. ArcSDE 10.2 for Oracle 12C安装注意事项
  13. ps6—如何安装笔刷
  14. CAUSALITY FOR MACHINE LEARNING
  15. QQ向陌生人聊天的autoit脚本
  16. Spring Boot cache backed guava/caffeine
  17. 陀螺产业区块链案例库 | 终本案件智能管理系统
  18. 蓝牙BLE设备连接与通信
  19. Logic BIST
  20. MySQL忘记密码怎么办

热门文章

  1. 【win10专业版】3dmax卸载不干净如何解决
  2. 刘润老师的5分钟商学院营销案例~比例偏见!
  3. Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
  4. python绝对值_python的绝对值
  5. 驱动开发:BSOD 0x7E(8000003)或命中断点卡住,__security_init_cookie导致
  6. 流体力学与流体计算力学基础(一)
  7. 详谈APP移动端 - 加壳与脱壳
  8. Clark与Park变换详解
  9. SylixOS中AHCI驱动框架分析
  10. 办理签证用的在职证明中英文版