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


相关推荐

  • 一起学JAVA 学习路径 知识体系

    JAVA基础学习路径Java基础部分需要学习很多的内容,但是很多小伙伴不清楚自己的学习路径希望本文可以帮助到你,本文是程序媛泡泡给大家总结的链接汇总,欢迎食用因为泡泡平时比较忙,所以文章在逐步更新拓展中,可以关注后方便后续查看哦祝愿大家都能拥抱技术,扬帆起航????01计算机基础知识与JAVA相关基础知识02JAVA编程环境搭建:安装JDK与配置环境变量、Eclipse03JAVA入门案例之HelloWorld练习与解析…

    2022年4月6日
    51
  • c语言程序设计谭浩强第五版第六章答案_谭浩强c语言答案第五版pdf

    c语言程序设计谭浩强第五版第六章答案_谭浩强c语言答案第五版pdfC语言程序设计第五版谭浩强著第七章答案1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。如有问题欢迎下方留言评论#include<stdio.h>voidmain(void){intmaxgy(intx,inty);intmingb(intx,i…

    2022年10月23日
    0
  • 什么是java swing_Java Swing简介:Swing是什么?

    什么是java swing_Java Swing简介:Swing是什么?Swing是新一代的图形界面工具。使用Swing来开发图形界面比AWT更加优秀,因为Swing是一种轻量级组件,它采用纯Java实现,不再依赖于本地平台的图形界面,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色。除此之外,Swing提供了比AWT更多的图形界面组件,因此可以开发出美观的图形界面程序。Swing类库结构Swing组件都采用MVC(Model-Vi…

    2022年7月7日
    18
  • java c++ 学哪个_c++和java区别 学哪个比较好

    java c++ 学哪个_c++和java区别 学哪个比较好尽管Java是基于C++的,但是相比之下,Java是一种更纯粹的面向对象程序设计语言。Java的运用方面比c++要广一些。Java主要包括Web开发、移动互联开发等,应用场景较多,市场的需求量上来看Java程序员的市场需求量更大一些。Java和C++有什么不同1、Java源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。对于Java而言,中间码就是字节码(、class),而解释器在…

    2022年7月9日
    18
  • 面向对象程序设计的基本原理_面向对象程序设计c++答案

    面向对象程序设计的基本原理_面向对象程序设计c++答案Java程序设计(面向对象)- 设计原理

    2022年4月22日
    29
  • squid+apache实现缓存加速「建议收藏」

    squid+apache实现缓存加速

    2022年1月23日
    48

发表回复

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

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