冒泡排序

博客介绍了如何通过添加标志变量`flag`来优化冒泡排序算法,当数组已经有序时,能够提前终止排序过程,提高排序效率。通过在内层循环中检测到元素交换后设置`flag`为`true`,在外层循环中检查`flag`是否为`false`来决定是否提前结束,从而避免不必要的比较。
摘要由CSDN通过智能技术生成

冒泡排序大家都知道,最基础的排序方法,直接上代码:

public class test10 {
    public static void main(String[] args) {
    	int[] a = {1,3,2,4,9,8};
        sort1(a);
        System.out.println(Arrays.toString(a));
    }
	
	public static int[] sort1(int[] arry) {
		int temp = 0;
		for (int i = 0; i < arry.length-1; i++) {//控制外层循环
			for (int j = 0; j < arry.length-1-i; j++) {//控制内层比较
				if(arry[j] > arry[j+1]) {
					temp = arry[j];
					arry[j] = arry[j+1];
					arry[j+1] = temp;
				}
			}
		}
		
		return arry;
	}
}

然后有一个问题就是,如果数组是有序的,怎样才能优化冒泡排序呢,使这个冒泡排序不用来一个一个的遍历比较,直接上代码:

public class test10 {
    public static void main(String[] args) {
    	int[] a = {1,2,3,4,5,8};
        sort1(a);
        System.out.println(Arrays.toString(a));
    }
	
	public static int[] sort1(int[] arry) {
		int temp = 0;
		boolean flag = false;
		for (int i = 0; i < arry.length-1; i++) {//控制外层循环
			for (int j = 0; j < arry.length-1-i; j++) {//控制内层比较
				if(arry[j] > arry[j+1]) {
					temp = arry[j];
					arry[j] = arry[j+1];
					arry[j+1] = temp;
					flag =true;
				}
			}
			if(flag == false) {
				break;
			}
		}
		
		return arry;
	}
}

定义flag就可以解决数组有序的问题,首先定义flag 为 false,在内层循环交换中,如果成功交换了,就使flag为true,在外层循环加一个判断,如果flag 为false,就跳出整个循环,因为,如果flag为flase的话,就说明数组里的元素一次都没有交换过位置,也就是说数组是有序的,直接跳出整个外层循环,这样也大大增加了冒泡排序的运行速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值