Java——冒泡排序

这里为Java初学者介绍一下冒泡排序。其实不管是什么语言,其中的思想都是一样的。

冒泡排序的思路:将一组数据从前往后排列,两两相邻数之间比较大小,如果前一个数大于(小于)后一个数,两者互换位置,否则不变。位置第1个和位置第2个比较之后,位置第2个和位置第3个再比较,依此类推。

举例:一组数据  32,54,12,39,47 从小到大冒泡排序

第一轮:

32 < 54,位置不变;32,54,12,39,47

54 > 12,交换位置;32,12,54,39,47

54 > 39,交换位置;32,12,39,54,47

54 > 47,交换位置;32,12,39,47,54         

(可以确定这组数据最大数是最末位置的54)

第二轮:

32 > 12,交换位置;12,32,39,47,54

39 > 32,位置不变;12,32,39,47,54

47 > 39,位置不变;12,32,39,47,54  

因为已知54是最大数,所以47没必要再和54做比较了。       

(可以确定这组数据第二大数是倒二位置的47)

……

 由此我们可以推出,第三轮比较两次,第四轮比较一次。得到最终结果。但是从举出的例子来看,   在第二轮第一次排序之后,我们已经得到了想要的结果,因此后面的操作就显得有些累赘,这就需要我们对代码进行再优化。

代码优化前:


		int[] arrs = {32,54,12,39,47};

		int temp = 0;//临时寄存数据
		
		for(int i = 0; i < arrs.length - 1; i++)//外循环表示第几轮
		{
			for(int j = 0; j < arrs.length - 1 - i; j ++)//内循环表示第几次,建议初学者先从内循环理解,再套入外循环
			{
				if(arrs[j] > arrs[j + 1])//比较大小,交换位置
				{
					temp = arrs[j];
					arrs[j] = arrs[j + 1];
					arrs[j + 1] = temp;
				}
			}
			
			System.out.println("\n==第" + (i + 1) + "轮==");
			
			for(int j = 0; j < arrs.length;j++)//输出第(i+1)轮排序后的结果
			{
				System.out.print(arrs[j] + "\t");
			}
		}

代码优化后:


		int[] arrs = {32,54,12,39,47};

		int temp = 0;
		
		for(int i = 0; i < arrs.length - 1; i++)
		{
			int flag = 0;//在变化后回到原来的值
			
			for(int j = 0; j < arrs.length - 1 - i; j ++)
			{
				if(arrs[j] > arrs[j + 1])
				{
					temp = arrs[j];
					arrs[j] = arrs[j + 1];
					arrs[j + 1] = temp;
					
					flag++;
				}
			}
			
			if (flag == 0)//设置一个开关,如果flag没有变化,则数据这一轮没有变化,判定已经排序完成,跳出循环
			{
				System.out.println("\n排序结束!!");
				break;
			}
			
			System.out.println("\n==第" + (i + 1) + "轮==");
			
			for(int j = 0; j < arrs.length;j++)
			{
				System.out.print(arrs[j] + "\t");
			}
		}

以上就是冒泡排序的全部内容了,各位看官若觉得阅读愉快,不妨留个赞吧!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值