冒泡排序的理解

最近研究了下冒泡排序

package com.study.ws.test;

import java.util.*;

public class MaoPao {
    final static Set<Integer> a = new HashSet();
    final static ArrayList<Integer> list = new ArrayList();
    static{
        final Random r = new Random( );
        while(a.size()<10 ){
            a.add(r.nextInt(20));
        }
        list.addAll(a);
        Collections.shuffle(list);
    }
	System.out.println(list);
    int size = list.size();
    for (int i = 0; i < list.size(); i++) {
        size--;
        for (int j = 0; j < size; j++) {
            int a = list.get(j);
            int b = list.get(j+1);
            if(a>b){
                int big = a;
                int small = b;
                list.set(j, small);
                list.set(j+1, big);
            }
        }
    }
    System.out.println(list);
}

所谓冒泡排序 意思是把最大的往上冒,接着第二大,第三大…
代码里有size–, 这里其实可以注释掉 然后第二层循环的循环总数 j<size变成 j<size-1 即可, 因为里边赋值的时候可能角标越界异常了,
这里的size-- 是一种 优化

在这里插入图片描述
看这张动图就明白为什么要size–, 因为后边的已经排序好了 你不size–也能完成排序,但是已经拍好了你还去比较不是浪费时间吗,
冒泡排序是把最大,第二大,第三大…依此往后排, 对应的最小的也在逐渐的往前挤, 看了这个动图理解了再去手写冒泡就很容易了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂人情世故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值