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


相关推荐

  • kali修改更新源(无法安全的用该源更新)

    因为kali是国外的,所以一些软件你要下载的话得从国外的网站下载,就会很慢,国内一些公司或者学校提供了国内的下载地址,所以我们需要更换更新源一,命令:vim/etc/apt/sources.list二、增加或替换掉sources.list文件里面的更新源地址:#阿里云debhttp://mirrors.aliyun.com/kalikali-rollingmain…

    2022年4月10日
    75
  • phpstorm激活码2021.3月最新在线激活

    第1章 Django入门到进阶-更适合Python小白的系统课程课程简介和开发环境配置~第2章 Django中的路由与视图本章主要讲解Django中视图和路由器的创建,并深入讲解路由器中地址的参数定义phpstorm激活码20213月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月13日
    41
  • 水流量霍尔传感器工作原理_51单片机温度传感器

    水流量霍尔传感器工作原理_51单片机温度传感器硬件准备(1)YF-B1流量传感器一个(2)51开发板一个基础知识(1)YF-B1流量传感器只有三根线。即数据线、VCC、GND。数据线输出为占空比为50%的方波。当水流通过水流转子组件时,磁性转子转动并且转速随着流量的变化而成线性变化。霍尔传感器(霍尔元件采样)输出相应的脉冲信号。其流量脉冲特性计算公式为:脉冲f(Hz)=8.1x流量Q(L/min)-3。(2)51单片机的中断…

    2022年9月29日
    0
  • vue3 路由传参_vue router传参

    vue3 路由传参_vue router传参前言vue路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转。传参方式可划分为params传参和query传参,而params传参又可分为在url中显示参数和不显示参数两种方式,这就是vue路由传参的三种方式。方式一:params传参(显示参数)params传参(显示参数)又可分为声明式和编程式两种方式1、声明式router-link该…

    2022年10月22日
    0
  • ntp服务器udp协议,golang实现NTP协议获取服务器时间[通俗易懂]

    ntp服务器udp协议,golang实现NTP协议获取服务器时间[通俗易懂]//fileprojectmain.gopackagemainimport(“encoding/binary””fmt””net””os””os/signal””sync””time”)const(NTP_SERVER_IP=”time.windows.com”/*NTPIP*/NTP_PORT_STR=”123″/*NTP专用端口号字符串*…

    2022年8月31日
    0
  • linux上安装Docker(非常简单的安装方法)

    linux上安装Docker(非常简单的安装方法)最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!Docker的三大核心概念:镜像、容器、仓库镜像:类似虚拟机的镜像、用俗话说就是安装文件。容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。仓库:类似代码仓库,是Docker集中存放镜像文件的场所。简单介绍一

    2022年6月9日
    34

发表回复

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

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