一、前言
冒泡排序是一种交换排序。

什么是交换排序呢?

两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。

二、算法思想
重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

/*** 冒泡排序* @param array* @return*/public static void bubbleSort(int[] array){int len  = array.length;int temp;//需要排序的次数  每次排序把最大的数放到最后面,故冒泡排序也叫沉底法//比如5个数,比较四趟就能确定其顺序for(int i = 1; i < len; i++){//两两比较,使最大的数沉底//最大的数沉底后,下一次只需要比较剩下的len-i个数即可System.out.print("第" + i + "趟排序:");for(int j = 0; j < len - i; j++){//若后面的数比前面的数字小,交换其顺序来保证后面的数字大于前面的数字if(array[j] > array[j+1]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}System.out.println(Arrays.toString(array));}}public static void main(String[] args){int[] nums = {5, 3, 7, 6, 2, 4};bubbleSort(nums);System.out.println(Arrays.toString(nums));}

查看结果,发现其实在第3趟就已经排好顺序了,但是还是要强行排序好几遍。如果一个数组越接近有序,则这种无用功会做的越多,所以应该进一步优化一下。
设计一个变量来标志数组是否已经有序,如果有序了,那么是不是就可以暂停排序啦。
引入变量exchange

/*** 冒泡排序* @param array* @return*/public static void bubbleSort(int[] array){int len  = array.length;int temp;boolean exchange = false;//需要排序的次数  每次排序把最大的数放到最后面,故冒泡排序也叫沉底法//比如5个数,比较四趟就能确定其顺序for(int i = 1; i < len; i++){//两两比较,使最大的数沉底//最大的数沉底后,下一次只需要比较剩下的len-i个数即可System.out.print("第" + i + "趟排序:");for(int j = 0; j < len - i; j++){//若后面的数比前面的数字小,交换其顺序来保证后面的数字大于前面的数字if(array[j] > array[j+1]){exchange = true;temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}System.out.println(Arrays.toString(array));if(false == exchange){break;}//如果数组在某一趟中已经排好有序,随时跳出循环exchange = false;}}public static void main(String[] args){int[] nums = {6,4,8,1,2,3,9};bubbleSort(nums);System.out.println(Arrays.toString(nums));}

三、算法分析

稳定性:       冒泡排序就是把小的元素往前调或者把大的元素往后调。是相邻的两个元素的比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

参考:https://cuijiahua.com/blog/2017/12/algorithm_1.html

排序(1):冒泡排序相关推荐

  1. C语言基础排序算法-冒泡排序

    C语言基础排序算法-冒泡排序 什么是冒泡排序? 顾名思义,这种排序方法就像水中的气泡一样,从底逐渐往上冒,一次前进一步.我们来看一个例子,看看到底是怎么冒泡的.假设有一个数组3,2,5,4,1,我们希 ...

  2. c 冒泡排序_C语言中选择排序和冒泡排序

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 来源:https://blog.csdn.net/zjy18886018024/cate ...

  3. Java小结(四)——折半查找、选择排序、冒泡排序

    最常见的一些基本算法,比如折半查找,选择排序,冒泡排序. 折半查找,是它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列     即数组内元素必须是 ...

  4. 经典排序算法 - 冒泡排序Bubble sort

    经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...

  5. c语言入门中冒泡排序的例题,选择排序和冒泡排序例题解析(c语言)

    排序算法排序算法 1.简单选择排序简单选择排序 假设有 n 个数,作简单选择排序简单选择排序,按升序排列: 先通过 n-1 次比较,从 n 个值中找出最小值,将它与第一个值交换. 再通过 n-2 次比 ...

  6. C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

    参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/ ...

  7. ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️

    目录 主要排序算法性能对比 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快速排序 Hoare版 挖坑版 前后指针法 归并排序 计数排序 海量数据的排序问题 主要排序算法性能对比 冒泡排序 各位同学 ...

  8. java数组排序冒泡排序_java数组常见的排序——选择排序和冒泡排序

    将数组中的元素按照一定的顺序(从小到大,或从大到小)排列 1,以下用了常用的两种排序,选择排序和冒泡排序 package com.mydemo02; import java.util.Arrays; ...

  9. JavaScript学习(九十三)—选择排序和冒泡排序

    JavaScript学习(九十三)-选择排序和冒泡排序 点我查看之前写过的 前端十大经典算法文章

  10. 递归算法设计 —— 选择排序和冒泡排序

    问题: 对于给定的含有n个元素的数组a,分别采用选择排序和冒泡排序 方法: 将a[0-n-1]分为有序区a[0-n-1]和无序区两个部分,有序区中的所有元素都不大于无序区中的元素,初始时有序区为空,即 ...

最新文章

  1. 分享Silverlight/WPF/Windows Phone一周学习导读(1月17日-1月23日)
  2. 大数据可视化及发展趋势
  3. ACS712模块 ACS712ELCTR-05A电流传感器模块
  4. ICCV 2019接收论文提前看,旷视11篇入选文章放出 | 资源
  5. 【运筹学】匈牙利法 ( 匈牙利法示例 2 | 第一步 : 变换系数矩阵 | 第二步 : 试指派 | 行列打√ | 直线覆盖 | 第二轮试指派 )
  6. python编写数学公式大全_python - 用python编写数学公式 - 堆栈内存溢出
  7. quant companies
  8. Python 中的作用域
  9. [笔记]kubernetes 无法启动问题
  10. 狼组安全平台免杀使用指南
  11. 一部影响美国网络安全政策的电影
  12. cJSON解析和打包
  13. android实现控件的手势缩放、移动以及双击还原
  14. emui内核支持kvm吗_EMUI和MIUI为什么不基于安卓linux内核不使用虚拟机直接用c++开发一些更流畅系统自带软件呢?...
  15. Java实现短信验证码(阿里云)附短信SDK demo下载
  16. android脚本,安卓好用的脚本程序—Gscript
  17. Quartus-II 13.1 详细安装、注册、配置步骤
  18. Spring boot 集成 WebService(简单使用、文件上传下载)
  19. 已删除的回收站文件恢复方法
  20. Springboot启动流程详解

热门文章

  1. 简单的跑马灯效果(轮播图)
  2. Lua-泛型for循环 pairs和ipairs的区别
  3. 【Java从0到架构师】RocketMQ 使用 - 集成 SpringBoot
  4. Linux故障解决(2)——使用yum安装netcat 及报错问题解决
  5. Linux运维问题解决(3)——VMware启动虚拟机报错 : 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取(T)
  6. kali使用msf 通过ms17_010_eternalblue(永恒之蓝)漏洞攻击win7测试 及乱码问题解决
  7. spring多个AOP执行先后顺序(面试问题:怎么控制多个aop的执行循序)
  8. Centos6离线安装docker 解决相关依赖
  9. 帆软报表设计器菜单栏介绍之二文件菜单
  10. 浙江农林大学有计算机专业,浙江农林大学计算机科学与技术专业在职研究生