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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 院考 c语言知识点完整版

    院考 c语言知识点完整版

  • 简单了解journalctl

    简单了解journalctljournalctl命令journalctl是什么以及作用?journalctl用来查询systemd-journald服务收集到的日志。systemd-journald服务是systemdinit系统提供的收集系统日志的服务。命令格式为:journalctl[OPTIONS…][MATCHES…]journalctl命令的路径为:/bin/jour…

  • c++ 优先级队列_kafka优先级队列

    c++ 优先级队列_kafka优先级队列C++优先级队列解析优先级队列:是零个或多个元素的集合,优先级队列中每一个元素都有一个优先级,元素的先后的出队顺序是由优先级的高低决定的。优先级高的先出队,优先级低的后出队。优先级队列的主要特点:从一个集合中能够快速的查找到和删除最大值和最小值的元素。1.入队解释图:2.出队解释图:3.代码:PriorityQueue.h#pragmaonce#ifndefMYPRIORITYQUEUE_H#defineMYPRIORITYQUEUE_H#include<iostre

  • js JavaScript vue 时间戳 转换 日期 YYYY-MM-DD hh:mm:ss 简洁写法

    js JavaScript vue 时间戳 转换 日期 YYYY-MM-DD hh:mm:ss 简洁写法两种方法方法一使用两个apitoLocaleDateString()和toTimeString()加正则表达式,简洁写法,推荐!还可以更改为以点(.)连接——正则表达式代码letnewDate=newDate();this.date=newDate.toLocaleDateString().replace(/\//g,”-“)+””+newDate.toTimeString().substr(0,8);结果缺点月份不能是03的形式

  • 关于ASMM和AMM[通俗易懂]

    关于ASMM和AMM[通俗易懂]关于ASMM和AMMhttp://blog.itpub.net/29800581/viewspace-1263875/http://blog.csdn.net/deanza/article/details/9635461现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成…

  • hdfs性能调优_spark写入hdfs文件太慢

    hdfs性能调优_spark写入hdfs文件太慢在集群的客户端使用hdf命令去查询的时候,出现一个响应特别慢的情况。同样的两个客户端节点,一个秒回,但是另一个可能需要数十秒才能响应。最终发现响应特别慢的原因是因为没有将hostname配置到/etc/hosts文件中…

发表回复

您的电子邮箱地址不会被公开。

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