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


相关推荐

  • 台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线

    台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线2017-03-1121:36:28电脑直接拨号上网(有宽带账号和密码)或者自动获取IP(有帐号没密码)上方式设置见图2016-12-1013:29:30右击网上邻居,点属性,创建一个新的连接,按照下一步下一步的步骤就可以了,然后成功之后输入你的宽带号码和密码就可以了,如果你使用的是ASDL拨号的,你可以下一个宽带我世界,电信的话你…2016-12-2917:28:19方法如下1、第一,…

    2022年6月26日
    32
  • pycharm2021永久激活码-激活码分享

    (pycharm2021永久激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月21日
    1.4K
  • 美女图片采集器 (源码+解析)[通俗易懂]

    美女图片采集器 (源码+解析)[通俗易懂]前言:有一段时间没写博客了,”持之以恒”徽章都暗了,实在不该。前一段确实比较忙,…小小地给自己的懒找个借口吧。大二即将结束,学习iOS也有一段时间了。今天抽点时间,开源一个前几天刚上传的App里面的一个功能,RT,美女图片采集器。 美女..相信没有人不喜欢吧,基于此,这个小Demo应运而生。注: 本文正在参加博

    2022年9月14日
    3
  • List去重3种方式

    List去重3种方式一、背景1.在实战中list去重是非常频繁的,下面就讲讲它的三种用法。二、第一种(原始代码去重)1.测试类publicclassDemoTest{publicstaticvoidmain(String[]args){ArrayList<String>list=Lists.newArrayList(“02″,”01”,”…

    2022年5月26日
    38
  • Swift4 String截取字符串

    Swift4 String截取字符串varstr1="AlexanderYeah";//1截取字符串的第一种方式//prefix截取前3个字符串varstr2=str1.prefix(3);print(str2);//suffix截取后3个字符串varstr3=str1.suffix(3);print(str3);//2截取一个范围的字符串//从0开始到倒数第二位结…

    2022年5月12日
    40
  • java 对象转map,map转对象

    java 对象转map,map转对象java对象转map:https://blog.csdn.net/to_Date32/article/details/78190785

    2022年5月16日
    47

发表回复

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

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