Java冒泡排序

算法思想

  1. 每一次循环结束之后,都要找出最大的数据,放到参与比较的这堆数据的最右边。(冒出最大的那个气泡。)(此轮找出最大的数据下一轮不参与比较!)
  2. 核心:
    拿着左边的数字和右边的数字比对,当左边 > 右边的时候,交换位置。

代码

for(int i = arr.length - 1; i > 0; i--){
    for(int j = 0; j < i; j++){
        if(arr[j] > arr[j + 1]){
            // 交换位置。
            // arr[j] 和 arr[j+1] 交换
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}

比较次数(n(n + 1)) / 2

过程

参与比较的数据:9 8 10 7 6 0 111次循环:
8 9 10 7 6 0 11 (1次比较:交换)
8 9 10 7 6 0 11 (2次比较:不交换)
8 9 7 10 6 0 11 (3次比较:交换)
8 9 7 6 10 0 11 (4次比较:交换)
8 9 7 6 0 10 11 (5次比较:交换)
8 9 7 6 0 10 11 (6次比较:不交换)
最终冒出的最大数据在右边:11

参与比较的数据:8 9 7 6 0 102次循环:
8 9 7 6 0 10(第1次比较:不交换)
8 7 9 6 0 10(第2次比较:交换)
8 7 6 9 0 10(第3次比较:交换)
8 7 6 0 9 10(第4次比较:交换)
8 7 6 0 9 10(第5次比较:不交换)

参与比较的数据:8 7 6 0 93次循环:
7 8 6 0 9(第1次比较:交换)
7 6 8 0 9(第2次比较:交换)
7 6 0 8 9(第3次比较:交换)
7 6 0 8 9(第4次比较:不交换)

参与比较的数据:7 6 0 84次循环:
6 7 0 8(第1次比较:交换)
6 0 7 8(第2次比较:交换)
6 0 7 8(第3次比较:不交换)

参与比较的数据:6 0 75次循环:
0 6 7(第1次比较:交换)
0 6 7(第2次比较:不交换)

参与比较的数据:0 66次循环:
0 6 (第1次比较:不交换)

循环次数n - 1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值