冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

  冒泡排序算法的运作如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

原始待排序数组| 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 实现过程及详解相关推荐

  1. java堆算法,Java 基本功04-JVM-Java堆详解和GC算法

    JVM GC 机制 1. 在此之前需要了解相关概念: 1.1 Java 堆内存: 在 HotSpot JVM 实现中 Heap 内存被"分代"管理. JVM 的内存首先被分割成两部 ...

  2. 算法问题:整数除法详解(Java方向)

    算法问题:整数除法详解(Java方向) 1.力扣题目 2.结果代码分析 3.完整的结果代码 4.代码出处和教学出处 5.博主 边学习边记录算法的学习 1.力扣题目 1.给定两个整数 a 和 b ,求它 ...

  3. 蘑菇街2015校招 Java研发笔试题 详解,2015java

    蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A.  父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B.  改变 ...

  4. Java虚拟机(Jvm详解)

    Java虚拟机(Jvm详解) 总体知识点框架 1.运行时数据区域 线程私有的: 程序计数器 虚拟机栈 本地方法栈 线程共享的: 堆 方法区 直接内存 (非运行时数据区的一部分) Java 虚拟机规范对 ...

  5. Java 并发之 AQS 详解(上)

    Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...

  6. Java并发之AQS详解(文章里包含了两片文章结合着看后边文章不清楚,请看原文)

          AQS全称抽象队列同步器(AbstractQuenedSynchronizer),它是一个可以用来实现线程同步的基础框架.当然,它不是我们理解的Spring这种框架,它是一个类,类名就是A ...

  7. 《算法导论》红黑树详解(一):概念

    在学习红黑树之前,读者应先掌握二叉查找树的相关知识.学习红黑树或者二叉查找树,推荐大家看<算法导论>.<算法导论>原书第3版 高清PDF 带详细书签目录下载 密码:acis & ...

  8. JAVA文件上传详解(附源码)

    文章目录 JAVA文件上传详解(附源码) 1.准备工作 2.使用类介绍 FileItem类 ServletFileUpload类 3.代码编写 JAVA文件上传详解(附源码) 在web应用中,文件上传 ...

  9. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

最新文章

  1. JSP HTML区别
  2. 点按钮ajax get方法修改0或1状态封装成函数
  3. Gin的路由类型:GET POST PUT DELETE
  4. vue-cli 中使用 less 插件
  5. 【javascript】js处理字符串
  6. 如何选择高性能的数据分析工具,你需要看看数据架构的进化史!
  7. “10亿赌约”董明珠赢了!格力电器2018年总收入超2000亿
  8. N多校2018d4t7Maximum Mode
  9. fatal error C1010: unexpected end of file while looking for precompiled header directive
  10. 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
  11. 利用MPU6050 + OLED屏显示3D矩形效果
  12. 2019蓝桥杯国赛c++ A组
  13. 51单片机八段数码c语言程序,51单片机做的音乐盒,带八段数码管显示程序+Proteus仿真...
  14. Django站点通过系统部署到线上
  15. sql end关键字
  16. node ref char*_「 volute 」树莓派+Node.js造一个有灵魂的语音助手
  17. 【历史上的今天】10 月 3 日:网络空间独立宣言之父诞生;3D 打印概念面世;eBay 收购 PayPal
  18. Ubuntu中如何开启samba/smb共享
  19. 提供凭证不足 无法访问这台计算机,xp系统连接win7的共享打印机时显示“提供的凭证不足”怎么办...
  20. Locust入门教程

热门文章

  1. 大数据004——Hadoop
  2. CSS3:text-shadow属性
  3. 开关电源基础01:电源变换器基础(2)
  4. 龙芯平台下软件安装(怎么寻找龙芯下的package)
  5. 追踪美国“监听门” 多家IT巨头表态证清白
  6. 使用伟福仿真器对IAR 8051生成的HEX文件进行仿真
  7. ESWC 2018 | R-GCN:基于图卷积网络的关系数据建模
  8. a4504光耦怎么检测好坏_槽型光耦怎么检测好坏
  9. 频繁跳槽是经济发展的必经路
  10. 干货 :假设检验中的第一类错误和第二类错误