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


相关推荐

  • 【QGIS入门实战精品教程】2.1:初识QGIS软件[通俗易懂]

    【QGIS入门实战精品教程】2.1:初识QGIS软件[通俗易懂]从今天开始,我们一起来学习一款免费开源、对机器要求低、功能强大的GIS软件:QGIS!一、QGIS简介QGIS(原称QuantumGIS)是一个自由软件的桌面GIS软件。它提供数据的显示、编辑和分析功能。QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、MacOSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的免费开源版桌面地理信息系统。二、QGIS软件的主要特点支持多种GIS数据文件格式。通过GDAL..

    2022年6月16日
    43
  • ubuntu clion激活_在线激活

    (ubuntu clion激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0VOERWDQ5R-eyJsaWNlbnNlSWQiOi…

    2022年3月30日
    180
  • C# 定时执行方法

    C# 定时执行方法定时执行某个方法privatevoidbutton1_Click(objectsender,EventArgse){System.Timers.Timertimer=newSystem.Timers.Timer();timer.Enabled=true;timer.Inter…

    2022年7月17日
    18
  • 什么是SOA架构?为什么使用SOA架构?

    什么是SOA架构?为什么使用SOA架构?SOA架构简介面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互**SOA具有以下五个特征**1.可重用;2.松耦合;3.明确定义的接口;…

    2022年6月24日
    30
  • Reaver linux 安装教程

    Reaver linux 安装教程首先安裝:Reaver相關庫文件打開終端機:$sudoapt-getinstalllibpcap-dev$sudoapt-getinstalllibsqlite3-dev安裝Reaver1.4$sudoapt-getinstallsubversion#部署svn環境$cdDesktop$svncheckouthttp://reaver-wps.googlecode.co…

    2022年6月3日
    41
  • 数据库分区表关联

    数据库分区表关联数据库表分区场景: 现实业务中有两个表关系比较紧密,而且数据量比较大的时候,需要对两个表都进行分区,并能很好的发挥分表作用创建分区数据库表注意: 数据库表最好是在创建的时候就进行分区,不能对已经创建的普通表(堆表)再进行分区变为分区表,否则转换起来比较麻烦。createtableOCS_COLLECT_PEOPLE(COLLECT_IDV

    2022年5月3日
    54

发表回复

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

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