JAVA---数组冒泡排序加图解(进行优化的冒泡排序)

JAVA—数组冒泡排序

冒泡排序算法的原理如下(原理来源于度娘):
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
图解冒泡排序:

在这里插入图片描述

代码实现
public static void main(String[] args) {
    int[] arr = {2,5,43,23,12};
    //通过Arrays工具类输出数组(与冒泡无关,就是遍历数组)
    System.out.println("排序之前:" + Arrays.toString(arr)); 
    int count = 0;  //初始化比较的次数为0
    //定义第三个空间,用来交换数值,这个也可以定义在循环里,最好定义在循环外面,
    // 因为如果定义在循环里,每次循环会开辟一次空间,浪费内存
    int t;
    //初始一个布尔变量(如果比较几次就比较出顺序了,就没有必要进行那么多次比较了,定义个布尔量判断是否还没比较完就已经排好序了)
    boolean flag;
    //控制的是比较几轮(如果对控制条件不明白,请手写画图研究)
    for (int i = 1; i < arr.length; i++){  
        //给布尔量赋值true,如果走下面的循环里的交换语句,就会被赋值为false,如果不走就是已经排序好了,		没必要再次进行比较了
        flag = true;
          //控制的是每轮的比较次数		
        for (int j = 0; j < arr.length - i; j++){
            count++;  //比较一次,计数器加1
            if (arr[j] > arr[j + 1]){ //如果前面的数值大,就进行交换数值
                t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
                //如果进行交换就把flag赋值为flase
                flag = false;
            }
        }
        //如果是true,证明已经排序好了,没有必要进行多余的比较了,break终止循环
        if (flag){
            break;
        }
    }
    System.out.println("比较次数:" + count);
    System.out.println("排序之后:" + Arrays.toString(arr)); //输出:排序之后:[2, 5, 12, 23, 43]
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值