java冒泡排序详解!!!带图

冒泡排序

冒泡排序算法图形化模拟

原数组:6 7 5 4 2 1

在这里插入图片描述

冒泡排序算法:

核心算法:

public static void bubble(int [] arr){

    // 模拟冒泡排序
    //  1. 0  ~  N - 1 选出最大
    //  2. 0  ~  N - 2 选出最大...
    //  n - 1. 0 ~ 1 选出最大

    if (arr.length == 1){
        return;
    }

    for (int i = arr.length - 1; i > 0; i--){ // 控制 0 ~ N -1  ~ N - 2...
        for (int j = 0; j < i; j++){
               if (arr[j] > arr[j + 1]) {
                   swap(arr,j, j + 1);
               }
        }
    }
}

swap算法

// 交换两数
public static void swap(int[] arr,int i, int j){

    // 利用异或运算的性质:
    // 1. a ^ a = 0;
    // 2. 0 ^ a = a;
    // 3. a ^ b = b ^ a;
    // 4. a ^ b ^ c = a ^ (b ^ c)

    arr[i] = arr[i] ^ arr[j];
    arr[j] = arr[i] ^ arr[j];
    arr[i] = arr[i] ^ arr[j];

    // 上述即可完成交换两数,但是该方法是一个抖机灵的方法
    // 要确保,a与b所在的内存地址是不同的,如果内存地址相同,结果会变为0
}

上述就是完整的详细图解冒泡排序算法,还有很多优化的空间,比如当我们给出一组已经排好序的数据,或者有一大部分数据已经有序了,还可以进行优化。可以给出一个标志位flag,如果进入了交换算法,那么表示需要进行排序,如果自始至终都没有进入交换算法,那么表示这个数据已经有序了,就不需要n次判断了,可以在外层循环,添加break。直接结束该循环。

比如给出的数据如下:[1,2,3,4,5,6,7,8,9]
[1,3,6,7,8,9,10,11,12]

这种类似的数据,可以试着优化一下,作者也是正在学习,如有不正确,欢迎大家斧正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值