JAVA冒泡排序法(优化算法)

本文深入解析冒泡排序的基本原理,通过内外双层循环实现递增排序,并介绍了一种优化策略,即通过标记判断是否已完全排序,提前结束循环,有效减少不必要的比较次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  冒泡排序法基本原理(递增排序):分两层循环,一层外循环,一层内循环。相邻两个元素相互比较,若前面的数大于后面一个的数,则交换位置,否则不变。

  将整个数列分成有序数列和无序数列两部分会比较好理解。

  刚开始时,整个数列是无序的,有序数列时空的。

  外循环循环一次,无序数列中的最大的数排到了最后(有序数列的元素个数增加1),那么不需要再去顾及这个有序数列,我们可以通过“标记”的方式判断有序数列还是无序数列,在循环过程中有发生元素交换则是无序,没有发生交换则是有序,当整个数列都是有序数列时,中断循环,可以节省步骤。

import java.util.Arrays;
public class Test{
	public static void main (String[] args) {
		int[] values = { 9,8,7,6,5,4,3,2,1,0};
		bubbleSort(values);
		System.out.println(Arrays.toString(values));
	}
	public static void bubbleSort(int[] b) {
		int temp;
		int i;
		//外循环一次完毕,有序数列加1
		for (i = 0; i<b.length;i++) {
			//初始化“标记”,“标记”为true则是有序
			boolean panDuan = true;
			for(int j=0;j<b.length-1-i;j++) {
				if(b[j] > b[j+1]) {
					temp = b[j];
					b[j] = b[j+1];
					b[j+1] = temp;
					panDuan = false;
					
				}
			}
			//若整个数列均为有序数列,即元素均无交换位置,中断循环
			if(panDuan) {
				System.out.println("第"+(i+1)+"次"+panDuan+"直接退出循环");
				break;
			}
			System.out.println("第"+(i+1)+"次循环"+panDuan);
			
		}
	}
	
}

运行结果:

第1次循环false
第2次循环false
第3次循环false
第4次循环false
第5次循环false
第6次循环false
第7次循环false
第8次循环false
第9次循环false
第10次true直接退出循环
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值