冒泡排序

如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。

1.原理:比较两个相邻的元素,将值大的元素交换到右边

2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

(1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。

(2)比较第2和第3个数,将小数 放在前面,大数放在后面。

(3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成

(4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。

(5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。

(6)依次类推,每一趟比较次数减少依次

3.代码实现

package myproject;
/*** * @author luckly**/
public class bubblesort {public static void main(String[] args) {int []arr=new int[] {10,9,8,6,4,65,77,44,};for(int i=0;i<arr.length-1;i++) {for(int j=0;j<arr.length-i-1;j++) {//此处你可能会疑问的j<n-i-1,因为冒泡是把每轮循环中较大的数飘到后面,// 数组下标又是从0开始的,i下标后面已经排序的个数就得多减1,总结就是i增多少,j的循环位置减多少if(arr[j]>arr[j+1]) {int temp=arr[j+1];arr[j+1]=arr[j];arr[j]=temp;}  }}for(int i:arr) {System.out.print(i+",");}}
}

4.算法分析:

(1)由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数

(2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。

(3)时间复杂度

1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。

2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

情况下,比较和移动次数均达到最大值:

[外链图片转存中…(img-leLEAgKr-1592312151742)]

冒泡排序的原理,思路,以及算法分析(Java实现)相关推荐

  1. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

  2. JVM 内部原理(七)— Java 字节码基础之二

    JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

  3. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...

  4. java寻优算法_模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径...

    模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...

  5. s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...

    <数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...

  6. 冒泡排序java jsp_冒泡排序实现原理

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  7. 冒泡排序算法(思路分析) [数据结构][Java]

    冒泡排序算法(思路分析) 基本介绍: 冒泡排序(Bubble Sorting)的基本思想是: 通过对 "待排序序列" 从前向后一次比较相邻元素的值,若发现逆序则交换,使值较大的元素 ...

  8. java 实现气泡 源码分析_冒泡排序算法原理及JAVA实现代码

    冒泡排序法:关键字较小的记录好比气泡逐趟上浮,关键字较大的记录好比石块下沉,每趟有一块最大的石块沉底. 算法本质:(最大值是关键点,肯定放到最后了,如此循环)每次都从第一位向后滚动比较,使最大值沉底, ...

  9. 详解KMP算法原理,以及完整java与C++实现

    点击此处学习更多算法与通信知识 作者 | labuladong 来源 | labuladong KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实 ...

最新文章

  1. 加来道雄 基因编辑 纳米机器人_浙大专家把螺旋藻制成微纳机器人,可通过光合作用靶向治疗肿瘤...
  2. 查看文件命令cat,more,less,tail,tac,nl,od---linux学习笔记
  3. 集合框架知识系列05 HashMap的源码分析和使用示例
  4. Redis: Redis Desk Manager Setup
  5. MVC小型商务网站实例(2)--项目架构
  6. Get Started with Visualforce
  7. Java 最坑爹的 10 大功能点!
  8. windows常用命令行整理
  9. 模拟赛-20190115-permutation
  10. Java 面向对象的程序设计(二)
  11. Apache Log4j2远程代码执行漏洞攻击,华为云安全支持检测拦截
  12. windows服务器查看系统异常,Windows服务器异常---查看系统日志--以蓝屏为例分析...
  13. 作为 SaaS 初创公司产品负责人,我学到了 5 条经验教训!
  14. 打造极致Material Design动画风格Button
  15. 射频微电子学_越老越吃香的射频工程师,如何才能成为一个出色的射频工程师?...
  16. 机器人编程和python的区别_乐高机器人编程和计算机编程的区别
  17. 更改文件扩展名HTML,文件的后缀名怎么改|更改文件后缀名的方法
  18. 文件系统性能测试工具 IOZONE工具
  19. 计算机专业的学生需要自学什么区别,计算机专业的学生该怎样自学量子力学?.PDF...
  20. 四六级、考研英语单词记忆---知米背单词APP推荐!

热门文章

  1. mysql换成oracle_mysql数据库迁移至Oracle数据库
  2. easyui-window窗口不遮挡_眼睛是心灵的窗口、佩戴舒适又时尚的米家防蓝光护目镜 Pro...
  3. workbench提示工作负载高度不平衡_搞CAE分析的孩子不容易,麻烦您,非线性,请收敛...
  4. license 验证服务器唯一机器码_代码审计工具Fortify 17.10及Mac平台license版本
  5. 电脑微信多开方法_微信电脑端多开方法
  6. windows ping默认参数
  7. java面板如何设置大小_java面板调整大小问题
  8. php如何让字母加1,如何使用PHP以任何顺序(从12个字母组成6个单词组成一个字母)进行字符搜索?...
  9. devserver配置_vue.config.js的配置
  10. verilog case语句_浅谈Design Compiler -- Verilog语言结构到门级的映射