冒泡

public static void maopao(List 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());

        }

    }

点赞