冒泡排序算法(Java)

冒泡排序算法(Java)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。



冒泡排序即每次遍历。相邻数字间进行比較,前者大于后者进行交换,不断将最大值后移,直至沉至最后位置;算法关键要点在于确定每次循环的边界。

后面两种算法则是对冒泡排序一定程度上的改良,但相对于其它排序算法,冒泡排序性能依旧较差。

//冒泡排序
public class Bubble_Sort {

	//最原始的解法
	public void bubble_sort1(int[] data)
	{
		int n = data.length;
		for(int i = 0; i < n; i++)
		{
			//注意循环的index范围,避免溢出
			for(int j = 0; j < n - i - 1; j++)
			{
				if(data[j] > data[j + 1])
				{
					swap(data, j , j + 1);
				}
			}
		}
	}
	
	//改进算法。通过引入一个标志量flag,推断一次循环是否有移动。若无移动,则表示
	//排序已经完毕,无需在进行下一次继续循环
	public void bubble_sort2(int[] data)
	{
		int n = data.length;
		boolean flag = true;//标示是否进行了移动
		int index = n - 1; //标示须要循环的最后一位的index
        //一旦在移动。则继续循环		
		while(flag)
		{
			flag = false;
			for(int j = 0; j < index - 1; j++)
			{
				if(data[j] > data[j + 1])
				{
					swap(data, j , j + 1);
					flag = true;
				}
			}
			index--;
		}
	}
	
	//改进算法二:当一次遍历中。最后m位都未进行转换,则表示后面n位都比当前这个最大数要大
	//依据冒泡排序知,每次沉入最大值,则后面这些位一定已经排好序
	public void bubble_sort3(int[] data)
	{
		int n = data.length;
		int index = n - 1;
		
		while(index != 0)
		{
			int k = 0;
			for(int j = 0; j < index - 1; j++)
			{
				if(data[j] > data[j + 1])
				{
					swap(data, j , j + 1);
					k = j;
				}
			}
			index = k;
		}
	}
	
	//无法像C++一样使用引用实现,故仅仅好使用data数组进行改变
	private void swap(int[] data , int a, int b)
	{
		int temp = data[a];
		data[a] = data[b];
		data[b] = temp;
	}
	
	public void print_array(int[] data)
	{
		for(int num : data)
		{
			System.out.print(num);
			System.out.print(" ");
		}
	}
	
	
	public static void main(String[] args) {
		
		Bubble_Sort bubble_Sort = new Bubble_Sort();
		int data[] = {2,34,45,2,13,24,5,24,57};
		bubble_Sort.bubble_sort3(data);
		bubble_Sort.print_array(data);

	}

}

版权声明:本文博主原创文章。博客,未经同意不得转载。

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

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

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

相关推荐

  • 如何卸载已安装的jdk_linux卸载tomcat

    如何卸载已安装的jdk_linux卸载tomcat一、查看Jdk的安装路径:whereisjavawhichjava(java执行路径)echo$JAVA_HOMEecho$PATH备注:如果是windows中,可以使用:setjava_home:查看JDK安装路径java-version:查看JDK版本二、卸载旧版本的JDK:1.确定JDK的版本:rpm-qa|grepjdkrpm-qa|grepgcj可能的结果…

    2022年9月30日
  • 服务器php环境搭建教程,PHP服务端环境搭建图文详解

    服务器php环境搭建教程,PHP服务端环境搭建图文详解PHP环境搭建也是一门技术,本文主要为大家分享一篇PHP服务端环境搭建的图文教程,具有很好的参考价值,希望对大家有所帮助。一、PHP服务端环境搭建1.php服务端环境安装套件xampp(apach+mysql+php解释器)F:\MyDoc文件(重要)\DL_学习\download重要资源\apache服务器组件安装此时进入xmapp面板显示成功运行测试本地Apache服务器是否开启:浏览器…

    2022年6月15日
  • Java—重写与重载的区别

    Java—重写与重载的区别Java—重写与重载的区别这几周开始看Java的知识,发现有一个有趣的现象就是,前两天刚看过的知识点,过一天又忘掉了。而且很多东西堆在脑子里像浆糊一样。所以边学习边总结是很重要的,今天想写一篇关于重写和重载的博客,为什么?因为面试会问啊,这是基础中比较重要的地方,但我百度了几篇博客之后发现写的都差强人意,各有缺点,但是!!访问量都特别高,所以我决定自己好好总结一篇自己的博客,也算是给自己的学习…

    2022年9月10日
  • Java虚拟机:Java中堆和栈的详细区别

    Java虚拟机:Java中堆和栈的详细区别

    2021年10月5日
  • String转换Long两种方式

    Long.ValueOf(“String”)与Long.parseLong(“String”)的区别Long.ValueOf(“String”)返回Long包装类型Long.parseLong(“String”)返回long基本数据类型

    2022年4月5日
  • k8s中实现pod自动扩缩容「建议收藏」

    k8s中实现pod自动扩缩容「建议收藏」如何在k8s中实现基于cpu、内存的pod自动扩缩容来应对非线性资源使用情况,以满足业务需求、节约资源。

    2022年7月17日

发表回复

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

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