原理简述

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

简单例子

对[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)相关推荐

  1. java中bubblesort是什么意思_排序--冒泡排序BubbleSort(Java)

    原理简述 冒泡排序是最简单的排序算法之一,主要是通过不断交换相邻元素,实现排序. 简单例子 对[4,2,6,3,2,1]进行升序排序 第一遍(排出最大值) 1.png 第二遍(排出次大值) 2.png ...

  2. Java十大排序算法总结,Java排序算法总结之冒泡排序

    本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起    ...

  3. Java数据结构——直接插入排序+希尔排序+冒泡排序

    文章目录 一.插入排序 (一).什么是插入排序 (二).图例 (三).Java代码 二.希尔排序 (一).什么是希尔排序 (二).图例 (三).Java代码 三.冒泡排序 (一).什么是冒泡排序 (二 ...

  4. 常用七种排序之冒泡排序(排序图解+分析Java

    hello呀!各位,这里是Sunlightʊə. 目前大三,主要在学习Java语言.可以一起交流呀! 相关文章: 常用七种排序之选择排序(排序图解+分析Java 常用七种排序之希尔排序(排序图解+分析 ...

  5. 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序

    /*** 排序方法整理* @author zhyea**/ public class Sort {/*** 冒泡排序,从小到大.* 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换.循环走访序列直 ...

  6. Java 排序 - 冒泡排序

    排序算法是最简单的入门级算法,冒泡排序虽然不稳定,但是简单,容易上手,所以,今天复习了下,作为自己的学习记录.高手请略过! package com.wicresoft.demo;public clas ...

  7. java 基础算法教程ppt,基础排序算法(附加java实现)

    七种最基本的排序算法:(面试必会!) 冒泡排序: 最基础的排序算法,从数列最前端开始,两两比较,如果前一个数比后一个数大,那么两个数就交换位置,经过一轮遍历之后,最大的数就到了数列的最后一个位置上,再 ...

  8. java oj主机名排序_oj教程--排序算法(Java)

    import java.util.ArrayList; import java.util.List; /** * 排序算法主类 * * @author eric */ class SortArray ...

  9. 各种排序算法及其java程序实现

    原文:http://blog.csdn.net/t12x3456/article/details/7430700 各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入 ...

最新文章

  1. mysql性能优化1
  2. c语言多线程的作用是什么意思,多线程-如何在普通C语言中启动线程?
  3. 科大星云诗社动态20210823
  4. 文献记录(part29)--Building crack identification and total quality management method based on deep ...
  5. 关于 Angular 项目类型为 library 的工程使用 tsconfig.json 的问题
  6. Qt中的QFileDialog类的几个示范代码
  7. 如何在README中使用图片
  8. 【熊猫多模式站群开发日志】 优化了关键词调度和模板调度
  9. android 电量详情,Android应用开发之Android 8.0 电池-)耗电详情获取方法
  10. 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
  11. Jmeter进阶之性能测试响应结果保存到本地
  12. 2021-05-15 MySql面试题 通用篇
  13. 阜阳智慧城市建设居全国地市级城市第11位
  14. QQ 音乐加密音乐文件格式转换并附加专辑图片教程
  15. android怎么改名字,手把手教你如何修改安卓软件的图标和名字
  16. dell刷sn_戴尔电脑强刷 BIOS 的方法
  17. FDTD的PML设置
  18. 爱上经典之《大公鸡》
  19. Cannot copy param 0 weights from layer 'fc6'; shape mismatch.
  20. Python_楼梯数计算

热门文章

  1. 结合实际代码谈常见串行通讯方式—USART、SPI以及IIC
  2. 网络流__5 多源汇最大流
  3. 程序设计基础之面向对象设计
  4. 【硬核】小明高考考了680分,他想知道在全国1000W考生中排什么名次?
  5. 刘韧:好记者到事实为止(2020修订版)
  6. xp系统usb android,xp系统usb手机网络共享怎么设置,xp设置usb手机网络分享的方法
  7. Java中使用JSON数据传递
  8. 电脑的眼泪--无限弹窗2
  9. Erlang-OTP思想理解
  10. 2021年上半年系统集成项目管理工程师上午试题参考解析(三)