java冒泡排序经典代码_Java干货分享:冒泡排序

java冒泡排序经典代码_Java干货分享:冒泡排序不管学习什么编程语言,冒泡排序都是每一个走上IT路的小伙伴的必经之路。但是还有好多小伙伴对冒泡排序摸不着头脑,今天知了堂小编就来分享一下经典算法——冒泡排序。首先咱们举个金鱼吐泡泡的例子来理解冒泡排序的过程:金鱼吐出的一连串泡泡就是我们要排序的数据,数据就像泡泡浮上水面一样一个一个被排好序,吐出的泡泡越大就会越快浮出水面,相应的,数据里某一个数字越大,那么就能越快的被排好序,当然最大的数字也是第一…

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

3f2f9450667bce57b284a92e1032ef43.png

不管学习什么编程语言,冒泡排序都是每一个走上IT路的小伙伴的必经之路。但是还有好多小伙伴对冒泡排序摸不着头脑,今天知了堂小编就来分享一下经典算法——冒泡排序。

首先咱们举个金鱼吐泡泡的例子来理解冒泡排序的过程:金鱼吐出的一连串泡泡就是我们要排序的数据,数据就像泡泡浮上水面一样一个一个被排好序,吐出的泡泡越大就会越快浮出水面,相应的,数据里某一个数字越大,那么就能越快的被排好序,当然最大的数字也是第一个被排好顺序的。

但是冒泡排序究竟是怎么比较数字的大小来排序的呢?其实冒泡排序的原理很简单,把两个挨在一起的数字进行比较大小,大数放在后面,较小的数放在前面。每遍历一次数据,就将一个最大的数放在整个数据的末尾,当遍历结束后,整个数据就被排好了序。

有小伙伴看到这里或许会问了:“怎么知道冒泡排序要遍历多少遍呢?”咱们还是根据冒泡排序的原理来判断,每两个数字就要比较一次,那么三个数字就要比较两次,依次排下去可以得到一个结论:如果一个数据有n个元素,那么冒牌排序就需要对数据遍历n-1次。

接下来咱们假设有一串数字需要从小到大排序,给大家用数据和图片演示一次。以下图的数据为例,可以得知5个数字需要遍历4次。

2df318b817997fed669de11950fdb239.png

第一次遍历:(1)17与5比较,17>5,这时最大的数是17,那么17与5交换;(2)17与20比较,17<20,此时最大的数变成了20,20与17交换;(3)20与8比较,20>8,20与8交换;(4)20与11比较,20>11,20与11交换。因此,第一次遍历后得到最大数为20,排序结果为下图。

3325da687992c0a3135e6038112bca83.png

由于第一次遍历时,最大值20已经排在末尾,因此在第二次遍历时,就不需要再比较20。

第二次遍历:(1)5与17比较,5<17,最大值为17,顺序不变;(2)17与8比较,17>8,17与8交换;(3)17与11比较,17>11,17与11交换。第二次遍历后得到此次遍历中的最大值17,的结果为下图。

ad2e62781c025f1d199892630b91a667.png

经过两次遍历后,我们发现数据的顺序已经按由大到小排序了,但是计算机并不知道,所以之后的两次遍历依旧会按照刚才的排序方法进行,但是没有数字会改变位置,直到遍历结束。

小伙伴们也可以看看下面的动图,让思路更加清晰。

13a6d0ebe06f46f5031013b604f1ad59.png

根据上面咱们分享的冒泡排序的过程,可以总结出以下在使用冒泡排序时需要注意的地方:

1、 有n个数,就需要进行n-1次遍历。

2、 每一次遍历都是一个循环,由于每次遍历都需要将数据两两比较,因此在大循环下还有一个小循环。

3、 在每一次遍历结束之后,都会找到一个当前的最大值,这个最大值在结束遍历时的位置是固定的,因此接下来的遍历不需要再比较这个最大值,所以每个小循环的次数都会比上一次小循环的次数-1。

相信小伙伴们已经懂得了冒泡排序的原理和排序逻辑,那么下面用代码给小伙伴们分享Java代码是如何实现冒泡排序的。

public class BubbleSort {
	public  static void bubbleSort(int[] arr) {
		if (arr==null||arr.length==1) 
			return;
		for (int i = 0; i < arr.length-1; i++) {
			boolean isSorted=true;
			for (int j = 0; j < arr.length-i-1; j++) {
				if(arr[ j ]>arr[ j+1 ]) {
					int temp=arr[ j ];
					arr[ j]=arr[ j+1];
					arr[ j+1]=temp;
					isSorted=false;
				}
			}
		if(isSorted)
			return;
		System.out.print("第"+(i+1)+"次遍历结果:");
		print(arr);
		}
	}
	public static void main(String[] args) {
		int[] arr= {17,5,20,8,11};
		System.out.print("排序前的顺序为:");
		print(arr);
		bubbleSort(arr);
		System.out.print("排序后的顺序为:");
		print(arr);
	}
	private static void print(int[] arr) {
		if (arr==null)
			return;
		for (int i :arr) {
			System.out.print(i+" ");
		}
		System.out.println();
	}
}

看完之后是不是觉得冒泡排序一下就变得简单了?今天的分享就到这里了,想获取更多Java干货和行业知识,关注我们哦~

fc5aa4c21072d0c32fe66bdb6cdf8eb2.png
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程

    万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程在大学时学习Hadoop大数据技术的时候,安装配置Hadoop框架,发现找的一些资料介绍得不够详细,比如一些路径的变化没有说清楚,这对于初学者来说是不够友好的,所以在这里做个详细总结介绍一下Hadoop框架,以及Ubuntu版本的Hadoop伪分布式的安装配置。

    2022年6月14日
    40
  • 如何查看端口号被占用情况_怎么查端口被哪个程序占用了

    如何查看端口号被占用情况_怎么查端口被哪个程序占用了最近在工作上Ranorex自动化测试工具老是连不上服务器,经检查发现服务器的端口号(7266)被其他测试工具占用。可以在命令窗口上输入netstat-ano查看本机的所有端口号以及对应的进程占用程序(PID)。打开任务管理器,找到与端口对应的PID,将其关闭,最后重启。…

    2022年7月27日
    1
  • 群体遗传学—admixture软件快速群体分群

    群体遗传学—admixture软件快速群体分群群体遗传学中测的很多个个体,得到了最终的SNPvcf文件,需要将其分成群体,看那几个物种聚在一起,一般使用的软件就是STRUCTURE,但是STREUTURE运行速度极慢,后面frappe软件提升了速度,但是也不是很快;admixture凭借其运算速度,成为了主流的分析软件。admixture软件一共分为5步:#step1/USER/zhusitao/Software/vcft

    2025年7月8日
    0
  • linux配置邮件服务器_shell发送邮件

    linux配置邮件服务器_shell发送邮件Linux发送邮件步骤一:安装sendmail软件查询是否有sendmail安装包yumsearchsendmail安装sendmail:yuminstall-ysendmail.x86_64步骤二:配置发件人信息1.开启smtp服务,并生成授权码2.在linux配置文件中填写发件人信息vi/etc/mail.rcsetfrom=86521760@qq.comsetsmtp=smtp://smtp.qq.com:587setsmtp-auth-user=8652

    2022年10月20日
    0
  • SpringBoot面试题及答案140道(2021年最新)

    SpringBoot面试题及答案140道(2021年最新)工作5年,处于找工作中ing。今年10月份刚刚整理出来的SpringBoot面试题,时间比较赶就没有按照模块分类排序了。总而言之,顺序比较乱,希望大家耐着性子看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的SpringBoot面试题答案不够清晰,欢迎私信或者评论只出,我看到都会去修改的!1、SpringBoot有哪些优点?SpringBoot的优点有:1、减少开发,测试时间和努力。2、使用JavaConfig有助于避免使用XML。3、避免大量的Maven…

    2022年6月7日
    30
  • jetbrains 激活码[在线序列号]

    jetbrains 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    50

发表回复

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

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