java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)
原理简述
冒泡排序是最简单的排序算法之一,主要是通过不断交换相邻元素,实现排序。
简单例子
对[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)相关推荐
- java中的de是什么_【转】java中main函数解析
源地址:http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html 从写java至今,写的最多的可能就是主函数 public st ...
- java中为按钮添加图片_我们可以在Java接口中为成员定义私有和受保护的修饰符吗?...
java中为按钮添加图片 No, it is not possible to define private and protected modifiers for the members in int ...
- java中super(aa bb cc)_面向对象程序设计(Java)答案
[单选题]下列哪个类声明是正确的( ) [单选题]Java中,在如下所示的Test类中,共有( )个构造方法. public class Test{ private int x; public Tes ...
- Java中未加入修饰符_(整理)java修饰符
java的修饰符有: 权限修饰符:public.protected.default.private 修饰符:abstract.static.final public 使用对象:类.接口.变量. ...
- Java中如何导入DW当中_用Dreamweaver插入Java特效方法
利用 Java 技术制作网页特效,可以使网页生动美观,然而, Java 命令并不是那么容易掌握的,很多读者看到编程语句就头晕.本实例将为读者介绍一个好东西 --Anfy Java ,有了它,可以不用编 ...
- java中如何改方法签名_我们可以在Java重写中更改方法签名吗?
不,在覆盖超类的方法时,我们需要确保两个方法都具有相同的名称,相同的参数和相同的返回类型,否则它们将被视为不同的方法. 简而言之,如果我们更改签名,则尝试执行超类的方法时,将无法覆盖超类的方法. 原因 ...
- java中 byte 取值范围_【二进制基础-java中byte的取值范围-推导过程】
java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数. 正数补码为其本身: 负数补码为其绝对值各位取反加1: 例如 ...
- java中的与或非_与或非 · java development · 看云
> 与或是运算操作,非是对二进制取反 ## 与操作(有0出0,全1出1) | 数字 | 二级制 | | --- | --- | | A | 1 0 1 0 | | B | 1 1 0 0 | | ...
- java中文件处理之图片_在Java 7中处理文件
java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...
最新文章
- Java 之 IO 异常的处理【了解】
- spring-基于注解的aop开发(快速入门)
- CentOS6.4卸载自带的OpenJDK并安装jdk1.6.21
- 中职计算机说课稿三篇,2020精选中职计算机说课稿3篇(15页)-原创力文档
- person p = new person();_Python函数__new__及__init__作用及区别解析
- 【dotnet跨平台】VSCode Linux 32位和Linux 64位下载地址分享
- 客户端跳转与服务器跳转的区别
- Sword 内核队列一
- Tapestry 教程(七)在Tapestry中一起使用Hibernate
- linux环境变量如何设置
- Android中继承的Dialog导致程序崩溃
- GD32F103基础教程—注意事项(三)
- 网站机房:DDOS防火墙在企业机房中的应用介绍
- IP地址分类及对应范围
- flac转换mp3格式使用什么软件好
- 网易2019实习生招聘笔试-牛牛的闹钟
- 【手绘集】我的手绘集
- 独立游戏开发日志:2021年2月14日 斜面攀爬
- python编写计算二项式值_python二项式期权定价方法
- kafka集群搭建教程(使用自带的zookeeper)
热门文章
- SAP Spartacus not found页面的显示触发机制 - ErrorPageTemplate
- SAP Spartacus 自定义指令的实现以及通过@HostBinding实现属性绑定
- 使用SAP CRM Application Enhancement Tool创建表格类型的扩展字段
- 如何通过离线安装的方式让sublime text具有TypeScript语法高亮的功能
- 给你的ABAP对象打上标签(Tag)
- 推荐一个好用的Chrome扩展,专门处理xml的,名叫XML Tree
- automatic asynchronous creation if no note exists
- SAP UI5 busy dialog - SVG
- SAP Fiori 1.0和2.0的区别
- Use BAdI to link appointment to a given opportunity during creation