冒泡排序的基本介绍:

冒泡排序是简单的一种算法,它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果发现逆序则交换。走访元素的工作是重复地进行直到没有相邻元素需要交换,完成排序。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法的原理
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序流程图:

实例分析:
假如原数组中数据顺序为 1 ,4,-8,8,10

第一趟排序:
①: 1 ,4,-8,8,10 //如果相邻的元素逆序,就交换位置 ,1<4不交换
②: 1 ,-8,4,8,10 //4>-8,交换位置
?:1 ,-8,4,8,10 //4<8,不交换位置
④: 1 ,-8,4,8,10 //8<10,不交换位置
第一趟排序过后位置信息为:1 ,-8,4,8,10

第二趟排序:
①: -8,1,4,8,10
②: -8,1,4,8,10
?:-8,1,4,8,10
第二趟排序过后位置信息为:-8,1,4,8,10

第三趟排序:
①: -8,1,4,8,10
②: -8,1,4,8,10
第三趟排序过后位置信息为:-8,1,4,8,10

第四趟排序:
①: -8,1,4,8,10
第四趟排序过后的位置信息为: -8,1,4,8,10

可以得到排序规则为:
1.一共进行数组大小-1次循环
2.每一趟排序的次数在逐渐减小

代码分析:

public class BubbleSort {public static void main(String[] args) {//演示冒泡排序的过程int arr[] = {1 ,4,-8,8,10};int temp=0; //临时变量for (int j = 0; j <arr.length-1 ; j++) {//如果前面的数比后面的大就交换位置if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("第一次排序过后:");System.out.println(Arrays.toString(arr));//第二趟排序,将第二大的数排在倒数第二位for (int j = 0; j <arr.length-1-1 ; j++) {//如果前面的数比后面的大就交换位置if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("第二次排序过后:");System.out.println(Arrays.toString(arr));//第三趟排序,将第三大的数排在倒数第三位for (int j = 0; j <arr.length-1-2 ; j++) {//如果前面的数比后面的大就交换位置if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("第三次排序过后:");System.out.println(Arrays.toString(arr));//第四趟排序,将第四大的数排在倒数第四位for (int j = 0; j <arr.length-1-3 ; j++) {//如果前面的数比后面的大就交换位置if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("第四次排序过后:");System.out.println(Arrays.toString(arr));}
}

执行结果:

代码实现:

public class BubbleSort {public static void main(String[] args) {//演示冒泡排序的过程int arr[] = {1 ,4,-8,8,10};int temp=0; //临时变量for (int i = 0; i <arr.length-1; i++) {for (int j = 0; j <arr.length-1-i ; j++) {//如果前面的数比后面的大就交换位置if(arr[j]>arr[j+1]){temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}System.out.println("第"+(i+1)+"次排序过后:");System.out.println(Arrays.toString(arr));}}}

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,可以在排序过程中设置一个标志,判断是否进行过交换,做一个简单的优化。
代码实现:

public  static void bubbleSort(int[] arr){int temp=0; //临时变量boolean flag=false;  //标识变量,表示是否交换for (int i = 0; i <arr.length-1; i++) {for (int j = 0; j <arr.length-1-i ; j++) {//如果前面的数比后面的大就交换位置if(arr[j]>arr[j+1]){flag=true;temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}if(!flag){  //一次交换都没发生break;}else{   //重置flag,进行下次判断flag=false;}}
}

冒泡排序--咕噜咕噜相关推荐

  1. PHP算法题:如何实现冒泡排序

    算法原理: 1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素. 2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数. 3.除了最后一个元素外,针对其 ...

  2. C#基础——数组(冒泡排序)

    数组 所谓数组,就是相同数据类型的元素按一定的顺序的集合,就是把有限个类型相同的变量用一个名字来命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量 ...

  3. python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例

    冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...

  4. 为什么双层循环 冒泡排序_冒泡排序的双重循环理解

    主要说一下冒泡排序的一些关键地方的个人理解,比如算法思想,两个循环的作用意义,中间循环变量范围的确定等. 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面 ...

  5. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  6. Equalizing Two Strings 冒泡排序or树状数组

    首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...

  7. java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  8. python冒泡排序与常用数学计算

    一 .冒泡排序: 冒泡排序: 属于交换排序; 两两比较大小,交换位置,如同水泡大的往上(右)跑; n个数从左至右编号从0到n-1,索引0和1比较,如果索引0大,则交换两者位置; 如果索引1大则不用交换 ...

  9. Console-算法-冒泡排序法|倒水法

    ylbtech-Arithmetic:Console-算法-冒泡排序法|倒水法 1.A,案例 -- ================================================== ...

最新文章

  1. 安卓如何运行python_如何在android上运行Python代码?
  2. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
  3. Java 8中Lambda表达式的阴暗面
  4. 五大质量工具详解及运用案例_掌握质量管理五大工具,实现九段质量管理成长...
  5. Linux 服务器停止当前运行的程序,实验,代码
  6. 【工具】Xshell安装注册以及简单属性配置
  7. Android Source Code
  8. 项目Alpha冲刺(10/10)
  9. service $anchorScroll
  10. Ubuntu安装Go语言环境
  11. 【python游戏编程之旅】第一篇---初识pygame
  12. pandas快速把txt转为excel
  13. 大学学计算机考试大一,大学计算机基础大一考试必备题库[1].pdf
  14. BT.656标准简介
  15. linux 安装p7zip 支持rar
  16. mysql插入微信名称中的特殊字符
  17. 动作电位的产生和动作电位的长距离高速传导
  18. 程序员经常浏览的网站
  19. C#针式打印机自定义纸张连续打印爬坑过程
  20. 关于Vue的再次试炼

热门文章

  1. 抖音帐号如何避免播放量限流、降权和封号
  2. Linux笔记 #06# 在VPS上自建Git服务
  3. 深度操作系统20.7正式发布
  4. 轰动全球,一个月7级博客大V是如何炼成的!
  5. 记录Robotium黑盒测试一个APK文件学习之从签名到简单测试
  6. python生成模拟微信气泡图片
  7. 基于HTML旅游网站项目的设计与实现——千岛湖旅游景点网站模板(6个页面)HTML+CSS+JavaScript
  8. Apollo配置中心介绍,多环境,分布式等
  9. 图像处理之K-Means算法演示
  10. VUE自定义日历组件,计算年月日,上个月份的空白展示,点击某一天进入详情页面