bubblesort java_排序--冒泡排序BubbleSort(Java)
原理简述
冒泡排序是最简单的排序算法之一,主要是通过不断交换相邻元素,实现排序。
简单例子
对[4,2,6,3,2,1]进行升序排序
第一遍(排出最大值)
第二遍(排出次大值)
第三遍
第四遍
第五遍
每次循环都通过比较相邻的元素,逆序就进行交换,每次都将本次循环内的最大元素交换到最后,通过多次循环,最终变为一个有序的数组。
代码实现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);
}
}
}
bubblesort java_排序--冒泡排序BubbleSort(Java)相关推荐
- java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)
原理简述 冒泡排序是最简单的排序算法之一,主要是通过不断交换相邻元素,实现排序. 简单例子 对[4,2,6,3,2,1]进行升序排序 第一遍(排出最大值) 1.png 第二遍(排出次大值) 2.png ...
- Java十大排序算法总结,Java排序算法总结之冒泡排序
本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起 ...
- Java数据结构——直接插入排序+希尔排序+冒泡排序
文章目录 一.插入排序 (一).什么是插入排序 (二).图例 (三).Java代码 二.希尔排序 (一).什么是希尔排序 (二).图例 (三).Java代码 三.冒泡排序 (一).什么是冒泡排序 (二 ...
- 常用七种排序之冒泡排序(排序图解+分析Java
hello呀!各位,这里是Sunlightʊə. 目前大三,主要在学习Java语言.可以一起交流呀! 相关文章: 常用七种排序之选择排序(排序图解+分析Java 常用七种排序之希尔排序(排序图解+分析 ...
- 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序
/*** 排序方法整理* @author zhyea**/ public class Sort {/*** 冒泡排序,从小到大.* 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换.循环走访序列直 ...
- Java 排序 - 冒泡排序
排序算法是最简单的入门级算法,冒泡排序虽然不稳定,但是简单,容易上手,所以,今天复习了下,作为自己的学习记录.高手请略过! package com.wicresoft.demo;public clas ...
- java 基础算法教程ppt,基础排序算法(附加java实现)
七种最基本的排序算法:(面试必会!) 冒泡排序: 最基础的排序算法,从数列最前端开始,两两比较,如果前一个数比后一个数大,那么两个数就交换位置,经过一轮遍历之后,最大的数就到了数列的最后一个位置上,再 ...
- java oj主机名排序_oj教程--排序算法(Java)
import java.util.ArrayList; import java.util.List; /** * 排序算法主类 * * @author eric */ class SortArray ...
- 各种排序算法及其java程序实现
原文:http://blog.csdn.net/t12x3456/article/details/7430700 各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入 ...
最新文章
- mysql性能优化1
- c语言多线程的作用是什么意思,多线程-如何在普通C语言中启动线程?
- 科大星云诗社动态20210823
- 文献记录(part29)--Building crack identification and total quality management method based on deep ...
- 关于 Angular 项目类型为 library 的工程使用 tsconfig.json 的问题
- Qt中的QFileDialog类的几个示范代码
- 如何在README中使用图片
- 【熊猫多模式站群开发日志】 优化了关键词调度和模板调度
- android 电量详情,Android应用开发之Android 8.0 电池-)耗电详情获取方法
- 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
- Jmeter进阶之性能测试响应结果保存到本地
- 2021-05-15 MySql面试题 通用篇
- 阜阳智慧城市建设居全国地市级城市第11位
- QQ 音乐加密音乐文件格式转换并附加专辑图片教程
- android怎么改名字,手把手教你如何修改安卓软件的图标和名字
- dell刷sn_戴尔电脑强刷 BIOS 的方法
- FDTD的PML设置
- 爱上经典之《大公鸡》
- Cannot copy param 0 weights from layer 'fc6'; shape mismatch.
- Python_楼梯数计算