原理简述

冒泡排序是最简单的排序算法之一,主要是通过不断交换相邻元素,实现排序。

简单例子

对[4,2,6,3,2,1]进行升序排序

第一遍(排出最大值)

1.png

第二遍(排出次大值)

2.png

第三遍

3.png

第四遍

4.png

第五遍

5.png

每次循环都通过比较相邻的元素,逆序就进行交换,每次都将本次循环内的最大元素交换到最后,通过多次循环,最终变为一个有序的数组。

代码实现Java

public static int[] sort(int[] array){

//数组长度

int length = array.length;

//外层循环

for (int i=0; i

//内层循环

for (int j=0; j

//如果后面的元素比前面的大,交换

if (array[j+1]

int temp = array[j+1];

array[j+1] = array[j];

array[j] = temp;

}

}//内层循环 end

}//外层循环 end

return array;

}

优化

上面数组的例子其实并不好,加入我们要排序的数组为[1,2,3,4,5,6],我们使用上面的算法进行排序,可以发现,即便是一个已经排序好的数组,该走的步骤一步不落,虽然没有进行交换,但是循环次数和比较次数是一定的。也就是说,这些循环完全是没有必要的。那么,如何判断一个数组是有序的呢?

其实可以发现,如果内层循环没有发生交换,那么数组便已经是有序的,我们便可以退出循环了。我们可以用一个标记,来记录是否发生了交换,进而判断是否还要继续进行排序。

代码实现

public static int[] sort(int[] array){

int length = array.length;

for (int i=0; i

//用来标记是否需要结束循环

boolean flag = true;

for (int j=0; j

if (array[j+1]

int temp = array[j+1];

array[j+1] = array[j];

array[j] = temp;

//发生了交换,不能结束循环

flag = false;

}

}

//是否结束循环

if (flag){

break;

}

}

return array;

}

通过这个标记,对于数组[1,2,3,4,5,6],内循环只需要进行一次,没有发生交换,外部循环就会结束,避免了多余的循环。

算法分析

时间复杂度:

最坏情况:O(n^2)

最好情况:O(n)

稳定性:

冒泡排序是稳定的排序,在排序过程中,相等的元素的相对位置不会发生变化。

完整代码

public class BubbleSort {

public static int[] sort(int[] array){

int length = array.length;

for (int i=0; i

//用来标记是否需要结束循环

boolean flag = true;

for (int j=0; j

if (array[j+1]

int temp = array[j+1];

array[j+1] = array[j];

array[j] = temp;

//发生了交换,不能结束循环

flag = false;

}

}

//是否结束循环

if (flag){

break;

}

}

return array;

}

public static void main(String[] args) {

int[] arr = {1,2,3,4,5,6};

int[] sort = sort(arr);

for (int i : sort) {

System.out.println(i);

}

}

}

java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)相关推荐

  1. java中的de是什么_【转】java中main函数解析

    源地址:http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html 从写java至今,写的最多的可能就是主函数 public st ...

  2. java中为按钮添加图片_我们可以在Java接口中为成员定义私有和受保护的修饰符吗?...

    java中为按钮添加图片 No, it is not possible to define private and protected modifiers for the members in int ...

  3. java中super(aa bb cc)_面向对象程序设计(Java)答案

    [单选题]下列哪个类声明是正确的( ) [单选题]Java中,在如下所示的Test类中,共有( )个构造方法. public class Test{ private int x; public Tes ...

  4. Java中未加入修饰符_(整理)java修饰符

    java的修饰符有: 权限修饰符:public.protected.default.private 修饰符:abstract.static.final public     使用对象:类.接口.变量. ...

  5. Java中如何导入DW当中_用Dreamweaver插入Java特效方法

    利用 Java 技术制作网页特效,可以使网页生动美观,然而, Java 命令并不是那么容易掌握的,很多读者看到编程语句就头晕.本实例将为读者介绍一个好东西 --Anfy Java ,有了它,可以不用编 ...

  6. java中如何改方法签名_我们可以在Java重写中更改方法签名吗?

    不,在覆盖超类的方法时,我们需要确保两个方法都具有相同的名称,相同的参数和相同的返回类型,否则它们将被视为不同的方法. 简而言之,如果我们更改签名,则尝试执行超类的方法时,将无法覆盖超类的方法. 原因 ...

  7. java中 byte 取值范围_【二进制基础-java中byte的取值范围-推导过程】

    java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: 例如 ...

  8. java中的与或非_与或非 · java development · 看云

    > 与或是运算操作,非是对二进制取反 ## 与操作(有0出0,全1出1) | 数字 | 二级制 | | --- | --- | | A | 1 0 1 0 | | B | 1 1 0 0 | | ...

  9. java中文件处理之图片_在Java 7中处理文件

    java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...

最新文章

  1. Java 之 IO 异常的处理【了解】
  2. spring-基于注解的aop开发(快速入门)
  3. CentOS6.4卸载自带的OpenJDK并安装jdk1.6.21
  4. 中职计算机说课稿三篇,2020精选中职计算机说课稿3篇(15页)-原创力文档
  5. person p = new person();_Python函数__new__及__init__作用及区别解析
  6. 【dotnet跨平台】VSCode Linux 32位和Linux 64位下载地址分享
  7. 客户端跳转与服务器跳转的区别
  8. Sword 内核队列一
  9. Tapestry 教程(七)在Tapestry中一起使用Hibernate
  10. linux环境变量如何设置
  11. Android中继承的Dialog导致程序崩溃
  12. GD32F103基础教程—注意事项(三)
  13. 网站机房:DDOS防火墙在企业机房中的应用介绍
  14. IP地址分类及对应范围
  15. flac转换mp3格式使用什么软件好
  16. 网易2019实习生招聘笔试-牛牛的闹钟
  17. 【手绘集】我的手绘集
  18. 独立游戏开发日志:2021年2月14日 斜面攀爬
  19. python编写计算二项式值_python二项式期权定价方法
  20. kafka集群搭建教程(使用自带的zookeeper)

热门文章

  1. SAP Spartacus not found页面的显示触发机制 - ErrorPageTemplate
  2. SAP Spartacus 自定义指令的实现以及通过@HostBinding实现属性绑定
  3. 使用SAP CRM Application Enhancement Tool创建表格类型的扩展字段
  4. 如何通过离线安装的方式让sublime text具有TypeScript语法高亮的功能
  5. 给你的ABAP对象打上标签(Tag)
  6. 推荐一个好用的Chrome扩展,专门处理xml的,名叫XML Tree
  7. automatic asynchronous creation if no note exists
  8. SAP UI5 busy dialog - SVG
  9. SAP Fiori 1.0和2.0的区别
  10. Use BAdI to link appointment to a given opportunity during creation