冒泡排序(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • .net学习笔记11–数据验证控件–RangeValidator

    .net学习笔记11–数据验证控件–RangeValidatorRangeValidator控件用于检测表单字段的值是否在指定的最大值和最小值之间。<div>请输入成绩:<asp:TextBoxID=”TextBox1″runat=”server”></asp:TextBox><asp:RangeValidatorID=”RangeValidator1″runat=”serv…

    2022年7月14日
  • PS初学者实例教程——图层样式的学习[斜面和浮雕]

    PS初学者实例教程——图层样式的学习[斜面和浮雕]本系列教程由中国教程网互助课堂专为PS新手制作,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临!本例我们学习“斜面和浮雕”图层样式斜面和浮雕是使用频率最高的一种图层样式,熟悉和掌握操作技巧,我们就可以制作出精彩的效果;特别是等高线,运用得当可以制作出与众不同的特殊视觉效果图象题后留有练习作业题,请选择练习.如果使用了附加方法,请加以说明

    2022年9月4日
  • matlab中wavedec2,[ZZ] matlab中小波变换函数dwt2和wavedec2 系数提取函数appcoef2和detcoef2…

    matlab中wavedec2,[ZZ] matlab中小波变换函数dwt2和wavedec2 系数提取函数appcoef2和detcoef2…https://zhidao.baidu.com/question/88038464.htmlDWT2是二维单尺度小波变换,其可以通过指定小波或者分解滤波器进行二维单尺度小波分解。而WAVEDEC2是二维多尺度小波分解。DWT2的一种语法格式是[cA,cH,cV,cD]=dwt2(X,‘wname‘);而对应的WAVEDEC2的语法格式是[C,S]=wavedec2(X,N,‘wname‘),其中…

    2022年7月23日
  • plsqldeveloper汉化包_plsql汉化包

    plsqldeveloper汉化包_plsql汉化包PLSQLDeveloper汉化补丁下载地址http://download.csdn.net/download/rxtanlian/10141249一、双击运行补丁二、选择你PLSQLDeveloper的安装目录看图三、点击蓝色三角形按钮四、继续下一步五、下一步,完成汉化六、完成七、重启你的PLSQLDeveloper效果就出来了,哈哈

    2022年10月12日
  • linux驱动编写(总结篇)[通俗易懂]

    linux驱动编写(总结篇)[通俗易懂]【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】01、linux驱动编写(入门)02、linux驱动编写(虚拟字符设备编写)03、linux驱动编写(字符设备编写框架)04、linux驱动编写(Kconfig文件和Makefile文件)05、linux驱动编写(块设备驱动代码)06、linux驱动编写(platfo……

    2022年7月26日
  • 测试用例模板案例

    测试用例模板案例qq账号:用例编号 所属模块 用例标题 优先级 前置条件 输入数据 操作步骤 预期结果 实际结果 是否通过 测试人员 测试时间 qq_dl_001 登录 账号为六位自然数组成 高 输入账号和密码点击登录 账号:123456密码:abcd12 1:输入账号 2:输入密码 3:点击”登录” 1:账号被填充 2:密码被填充 3:登录成功,跳转主界面 1:账号被填充

    2022年7月17日

发表回复

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

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