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());
}
}