冒泡

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

相關文章
相關標籤/搜索