冒泡排序算法 Java 实现过程及详解
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的运作如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外循环)
第一次两两比较6 > 2交换(内循环)
交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |
第二次两两比较,6 > 4交换
交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |
第三次两两比较,6 > 1交换
交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |
第四次两两比较,6 > 5交换
交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第五次两两比较,6 < 9不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二趟排序(外循环)
第一次两两比较2 < 4不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二次两两比较,4 > 1交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三次两两比较,4 < 5不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第四次两两比较,5 < 6不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三趟排序(外循环)
第一次两两比较2 > 1交换
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第二次两两比较,2 < 4不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第三次两两比较,4 < 5不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第四趟排序(外循环)
第一次两两比较,1<2,无交换
第二次两两比较,2<4,无交换
第五趟排序(外循环)
第一次两两比较,1<2,无交换
排序完毕,输出最终结果1 2 4 5 6 9
代码
public class bubbleSort {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubint score[] = { 6, 2, 4, 1, 5, 9 };for (int i = 0; i < score.length - 1; i++) { // 最多做n-1趟排序for (int j = 0; j < score.length - i - 1; j++) { // 对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)if (score[j] > score[j + 1]) { // 把大的值交换到后面int temp = score[j];score[j] = score[j + 1];score[j + 1] = temp;}}System.out.print("第" + (i + 1) + "趟排序结果:");for (int a = 0; a < score.length; a++) {System.out.print("\t"+score[a]+"\t");}System.out.println("");}System.out.print("最终排序结果:");for (int a = 0; a < score.length; a++) {System.out.print("\t"+score[a]+"\t");}}
}
输出结果:
第1趟排序结果: 2 4 1 5 6 9
第2趟排序结果: 2 1 4 5 6 9
第3趟排序结果: 1 2 4 5 6 9
第4趟排序结果: 1 2 4 5 6 9
第5趟排序结果: 1 2 4 5 6 9
最终排序结果: 1 2 4 5 6 9
参考资料:
http://www.cnblogs.com/wuzhenbo/archive/2012/03/30/2423861.html
参考资料:http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F
冒泡排序算法 Java 实现过程及详解相关推荐
- java堆算法,Java 基本功04-JVM-Java堆详解和GC算法
JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...
- 算法问题:整数除法详解(Java方向)
算法问题:整数除法详解(Java方向) 1.力扣题目 2.结果代码分析 3.完整的结果代码 4.代码出处和教学出处 5.博主 边学习边记录算法的学习 1.力扣题目 1.给定两个整数 a 和 b ,求它 ...
- 蘑菇街2015校招 Java研发笔试题 详解,2015java
蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A. 父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B. 改变 ...
- Java虚拟机(Jvm详解)
Java虚拟机(Jvm详解) 总体知识点框架 1.运行时数据区域 线程私有的: 程序计数器 虚拟机栈 本地方法栈 线程共享的: 堆 方法区 直接内存 (非运行时数据区的一部分) Java 虚拟机规范对 ...
- Java 并发之 AQS 详解(上)
Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...
- Java并发之AQS详解(文章里包含了两片文章结合着看后边文章不清楚,请看原文)
AQS全称抽象队列同步器(AbstractQuenedSynchronizer),它是一个可以用来实现线程同步的基础框架.当然,它不是我们理解的Spring这种框架,它是一个类,类名就是A ...
- 《算法导论》红黑树详解(一):概念
在学习红黑树之前,读者应先掌握二叉查找树的相关知识.学习红黑树或者二叉查找树,推荐大家看<算法导论>.<算法导论>原书第3版 高清PDF 带详细书签目录下载 密码:acis & ...
- JAVA文件上传详解(附源码)
文章目录 JAVA文件上传详解(附源码) 1.准备工作 2.使用类介绍 FileItem类 ServletFileUpload类 3.代码编写 JAVA文件上传详解(附源码) 在web应用中,文件上传 ...
- Java单元测试之JUnit4详解
2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...
最新文章
- JSP HTML区别
- 点按钮ajax get方法修改0或1状态封装成函数
- Gin的路由类型:GET POST PUT DELETE
- vue-cli 中使用 less 插件
- 【javascript】js处理字符串
- 如何选择高性能的数据分析工具,你需要看看数据架构的进化史!
- “10亿赌约”董明珠赢了!格力电器2018年总收入超2000亿
- N多校2018d4t7Maximum Mode
- fatal error C1010: unexpected end of file while looking for precompiled header directive
- 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
- 利用MPU6050 + OLED屏显示3D矩形效果
- 2019蓝桥杯国赛c++ A组
- 51单片机八段数码c语言程序,51单片机做的音乐盒,带八段数码管显示程序+Proteus仿真...
- Django站点通过系统部署到线上
- sql end关键字
- node ref char*_「 volute 」树莓派+Node.js造一个有灵魂的语音助手
- 【历史上的今天】10 月 3 日:网络空间独立宣言之父诞生;3D 打印概念面世;eBay 收购 PayPal
- Ubuntu中如何开启samba/smb共享
- 提供凭证不足 无法访问这台计算机,xp系统连接win7的共享打印机时显示“提供的凭证不足”怎么办...
- Locust入门教程