冒泡排序(java代码实现)

冒泡排序(java代码实现)冒泡排序和快速排序1、冒泡排序1.1介绍1.2代码实现1.2.1基本实现1.2.2优化2、快速排序2.1介绍2.2代码实现1、冒泡排序1.1介绍1.2代码实现1.2.1基本实现1.2.2优化2、快速排序2.1介绍2.2代码实现…

大家好,又见面了,我是你们的朋友全栈君。

1、冒泡排序

1.1 介绍

冒泡排序(Bubble Sorting) 的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后面,就像水底下的气泡一样逐渐向上冒。

图解:
在这里插入图片描述
数组元素随次数变化:
在这里插入图片描述

1.2 代码实现

1.2.1 基本实现

代码:

public class BubbleSort { 
   
	public static void main(String[] args) { 
   
		int[] arr1 = { 
    9, 5, 6, 8, 2, 7, 3, 4, 1 };
		int temp = 0; // 用于交换

		for (int i = 0; i < arr1.length - 1; i++) { 
   
			for (int j = 0; j < arr1.length - i - 1; j++) { 
   
				// 如果前面的数比后面的数大,就直接交换
				if (arr1[j] > arr1[j + 1]) { 
   
					temp = arr1[j];
					arr1[j] = arr1[j + 1];
					arr1[j + 1] = temp;
				}
			}
			System.out.println("第" + (i + 1) + "趟后的数组元素");
			System.out.println(Arrays.toString(arr1));
		}

		// 输出最后的结果
		System.out.println("最终结果:");
		for (int i : arr1) { 
   
			System.out.print(i + " ");
		}
	}
}

1.2.2 优化

当给定的数组,在一次循环中没有任何的交换时,表明这个数组已经是有序的,就不用继续进行下面的循环,从而提前结束;
例如:int [] arr1= {1,2,4,3};

使用上面的代码,流程如下:
在这里插入图片描述
在第二次交换时就没有交换了,可以直接结束,优化后流程:
在这里插入图片描述

优化的代码: 在代码中添加一个判断,在此次循环中是否有数据交换。

public class BubbleSort { 
   
	public static void main(String[] args) { 
   
		int [] arr1= { 
   1,2,4,3};
		int temp=0; //用于交换
		boolean flag=false; //优化,判断循环是否发生交换
		
		for(int i=0;i<arr1.length-1;i++) { 
   
			for(int j=0;j<arr1.length-i-1;j++) { 
   
				//如果前面的数比后面的数大,就直接交换
				if(arr1[j]>arr1[j+1]) { 
   
					flag=true; 
					temp=arr1[j];
					arr1[j]=arr1[j+1];
					arr1[j+1]=temp;
				}
			}
			
			  if(!flag) { 
    
				  break; //没有交换直接结束 
			  }else { 
    
				  flag=false; //重置flag,方便下一次循环使用 
			  }
			 
			System.out.println("第"+(i+1)+"趟后的数组元素");
			System.out.println(Arrays.toString(arr1));
		}
		
		//输出最后的结果
		System.out.println("最终结果:");
		for (int i : arr1) { 
   
			System.out.print(i+" ");
		}
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152148.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月22日 上午8:46
下一篇 2022年6月22日 上午8:46


相关推荐

  • 欧拉函数及其证明_欧拉函数证明题

    欧拉函数及其证明_欧拉函数证明题请思考以下问题:  任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?)计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以φ(n)=4。φ(n)的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。第一种情况如果n=1,则φ(1

    2022年8月22日
    8
  • 可视化数据库设计软件有哪些_数据库可视化编程

    可视化数据库设计软件有哪些_数据库可视化编程学习目标:C#数据库应用程序的开发环境的构成服务器资源管理器类型化数据集创建简单的数据库应用程序水晶报表Notes:类型化数据集利用服务器资源管理器建立数据连接利用服务器资源管理器可执行的任务如下:1)打开数据连接。2)登录到服务器上,并显示服务器的数据库和系统服务,包括事件日志、消息队列、性能计数器、系统服务和SQL数据库。3)查看关于可用Web服务的信息以及使信息…

    2022年4月20日
    56
  • 排序方法

    排序方法

    2021年8月12日
    58
  • 什么是倒排索引?

    什么是倒排索引?不多说,直接上干货!欢迎大家,关注微信扫码并加入我的4个微信公众号:大数据躺过的坑Java从入门到架构师人工智能躺过的坑Java全栈大联盟每天都有大量的学习视频资料和精彩技术文章推送…

    2022年7月3日
    23
  • 漏洞挖掘丨敏感信息泄露+IDOR+密码确认绕过=账户劫持

    漏洞挖掘丨敏感信息泄露+IDOR+密码确认绕过=账户劫持获得账户auth_token目标网站是一个工作招聘门户网站,测试保密原因暂且称其为redacted.com。一开始,我登录以应聘者身份去测试CSRF或某些存储型XSS,但没什么发现。接下来,我就想到了越权测试(IDOR),为此,我又创建了另外一个账号,两个账号一起可以测试如注册、登录、忘记密码等功能点的越权可能。创建账号前我开启了流量抓包想看看具体服务端的响应,注册开始时,网站会跳出一个提示,…

    2022年6月10日
    33
  • 数据系统架构——Lambda architecture(Lambda架构)

    数据系统架构——Lambda architecture(Lambda架构)传统系统的问题“我们正在从IT时代走向DT时代(数据时代)。IT和DT之间,不仅仅是技术的变革,更是思想意识的变革,IT主要是为自我服务,用来更好地自我控制和管理,DT则是激活生产力,让别人活得比你好”——阿里巴巴董事局主席马云。数据量从M的级别到G的级别到现在T的级、P的级别。数据量的变化数据管理系统(DBMS)和数仓系统(DW)也在悄然的变化着。

    2022年6月25日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号