冒泡

public static void maopao(List<Integer> beforeNums){
        int length = 0; //数据长度-1
        int position = 0; //用于记录一轮中第一次交换数据的位置(前一个元素) 例如  1  2  5  3 2 中 5和3的比较 记录5的位置,下一轮开始比较的时候直接从这个位置向前推1位
        int temp = 0;
        boolean flag = false; //标示是否结束循环  还回数据  默认false退出循环    如果有数据调换了位置 则为true 继续进行下一轮的循环
        try{
            if(null != beforeNums && 0 <= (length = beforeNums.size()-1)){ //集合不为空  开始排序
                for(int i=0; i<length;i++){ //只需循环数据长度-1次
                    
                    for(int j=position;j<length;j++){ //开始比较数据的循环
                        temp = beforeNums.get(j);
                        if(temp > beforeNums.get(j+1)){
                            beforeNums.set(j,  beforeNums.get(j+1));
                            beforeNums.set(j+1, temp);
                            if(false == flag){ //只有第一轮计数器大于0 且循环位置索引大于0 才设置下一轮数据比较的开始位置
                                position = j-1>0?j-1:0; //设置下次开始比较数据的位置
                                flag = true;
                            }
                        }
                    }
                    //如果一轮下来没有数据进行了 数据位置变化,则跳出循环
                    if(false == flag){
                        return;
                    }
                    flag = false;
                }
            }
            
        }catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

点赞