交换排序之 【冒泡排序】

class BubbleSorter {

    public static void main(String[] args) {
        int temp; //临时变量,用于数字交换

        boolean flag = false; //是否发生交换,false没发生,true发生

        int[] arrayInt = {21,345,32,567,90,99};//需排序的目标数组  
        

        for(int i = 0; i < arrayInt.length; i++) {
            for (int j = 0; j < arrayInt.length - i - 1; j++) {
            
            //这里 - i - 1是精髓,循环次数呈递减趋势
            
                if (arrayInt[j] < arrayInt[j + 1]) {
                    temp = arrayInt[j];
                    arrayInt[j] = arrayInt[j + 1];
                    arrayInt[j + 1]  = temp;
                    flag = true;
                    //冒泡排序精髓在于两数比较,然后做交换。首尾相连是关键。

                 }
            }
            if(!flag) {
                return;
            }
        }
        
        System.out.print("ArrayList: ");
        for (int ints : arrayInt) {
            System.out.print(", " + ints);
        }
    }
}


看下执行过程:

排序前:21  345  32  567  90  99

第一次排序(外循环 I = 0 ):
        {345  21}  32  567  90  99(内循环第一轮结果)
        345  {32  21}  567  90  99(内循环第二轮结果)
        345  32  {567  21}  90  99(内循环第三轮结果)
        345  32  567  {90  21}  99(内循环第四轮结果)
        345  32  567  90  {99  21}(内循环第五轮结果)
        
第二次排序(外循环 I = 1 ):
        {345  32}  567  90  99  21(内循环第一轮结果)
        345  {567  32}  90  99  21(内循环第二轮结果)
        345  567  {90  32}  99  21(内循环第三轮结果)
        345  567  90  {99  32}  21(内循环第四轮结果)
        
第三次排序(外循环 I = 2 ):
        {567  345}  90  99  32  21(内循环第一轮结果)
        567  {345  90}  99  32  21 (内循环第二轮结果)
        567  345  {99  90}  32  21 (内循环第三轮结果)
        
        (实际上到这一步时候,数组已经完成排序,后面的循环就不需要了。
            故用标记flag标注,为false时候,表明数组已经有序,无需后面循环了。
            直接结束循环。不过,还是看看后面执行过程
         ):
         
第四次排序(外循环 I = 3 ):
        {567  345}  99  90  32  21 (内循环第一轮结果)
        567  {345  99}  90  32  21 (内循环第二轮结果)
        
第五次排序(外循环 I = 4 ):
        {567  345}99  90  32  21 (内循环第一轮结果)
        
第六次排序(外循环 I = 5 ): 内循环直接退出,结束。

你可能感兴趣的:(排序,计算,存储,冒泡)