java冒泡排序图解_[图解] 冒泡排序
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冒泡排序图解_[图解] 冒泡排序相关推荐
- java 桶排序_[图解] 桶排序
桶排序是一种排序的思想,其实现包括计数排序和基数排序两种,冒泡排序.选择排序.插入排序.归并排序.快速排序和堆排序都是基于比较的排序,而桶排序提出了一种新的思路,即基于数据状态的排序. 1. 桶排序的 ...
- 图解数据结构使用java电子书下载_图解数据结构:使用Java 胡昭民著 PDF下载
本书内容架构完整,逻辑清楚,采用丰富的图例来阐述基本概念及应用.强调边做边学,结合下载文件,给予最完整的支援.以Java程序语言实现数据结构中的重要理论,以范例程序说明数据结构的内涵.采用JavaID ...
- java对象底层原存储结构图解_图解图库JanusGraph系列-一文知晓“图数据“底层存储结构...
大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 转载文章请保留以下声明: 一:存储模式 留言或私信我,邀请你加入"图数据库交流"微信群! 1. ...
- java内存图解_图解JAVA内存模型(JMM:JAVA Memory Model)
本文主要说明两个问题:JMM存在的意义是什么?JMM内部的工作原理是什么(重点讲一下并发编程模式下的数据访问一致性问题) . 1.为什么要使用JMM? 当我们刚开始接触JAVA语言的时候,就会被告知J ...
- java 数组 内存_图解Java数组的内存分配
1. Java数组是静态的 Java是静态语言,所以Java的数组也是静态的,即:数组被初始化后,长度不可变 静态初始化:显式指定每个数组元素的初始值,系统决定数组长度 String[] books ...
- java简单数据结构_图解Java常用数据结构
最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList ...
- java 矩阵转置_图解利用Java实现数组转置
我们编写Java代码,如下图所示: package com.tina; public class demo { public static void main(String args[]) { int ...
- java内聚 耦合_图解高内聚与低耦合,傻瓜都能看懂!
作者:大道方圆 来源:www.cnblogs.com/xdecode/p/9393885.html 模块 模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决 ...
- rsatool使用步骤图解_图解360系统重装大师如何使用
电脑使用久了就会出现这样或那样的问题,比如运行卡顿,浏览速度下降的现象,该怎么办呢?实际上只要借助重装软件,就可以轻松解决电脑卡顿的问题了.那要怎么使用360系统重装大师呢?今天,小编给大家带来了36 ...
- python计算图解_图解NumPy,看这一篇就够了!
晓查 编译整理 量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近,国 ...
最新文章
- openssl md5算法 —— Linux下(字符串加密、文件加密)
- 一个 NAND flash写函数
- 偏最小二乘法回归(Partial Least Squares Regression)
- static 应用php,PHP static的一例应用
- openssl与cryptoAPI交互AES加密解密
- Hadoop官方文档翻译——MapReduce Tutorial
- 【视频回放】Best of Build Tour in China 暨 Watching Party - 大湾区专场
- jquery 获得table 行数
- 华为补助武汉员工,最高每日 2000 元;iPhone SE 2 量产或推迟;PowerShell 7.0 发布 | 极客头条...
- 前端安全究竟该怎么做?从一个安全漏洞说起......
- Oracle IO问题解析(一)
- ArcSDE 10.2 for Oracle 12C安装注意事项
- ps6—如何安装笔刷
- CAUSALITY FOR MACHINE LEARNING
- QQ向陌生人聊天的autoit脚本
- Spring Boot cache backed guava/caffeine
- 陀螺产业区块链案例库 | 终本案件智能管理系统
- 蓝牙BLE设备连接与通信
- Logic BIST
- MySQL忘记密码怎么办
热门文章
- 【win10专业版】3dmax卸载不干净如何解决
- 刘润老师的5分钟商学院营销案例~比例偏见!
- Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
- python绝对值_python的绝对值
- 驱动开发:BSOD 0x7E(8000003)或命中断点卡住,__security_init_cookie导致
- 流体力学与流体计算力学基础(一)
- 详谈APP移动端 - 加壳与脱壳
- Clark与Park变换详解
- SylixOS中AHCI驱动框架分析
- 办理签证用的在职证明中英文版