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