java 冒泡排序 经典算法题

//        冒泡排序:经典算法题。
//        有一组数字 2,10,8,20,11,把这组数按照从大到小的顺序排列出来。20,11,10,8,2
//        2,10,8,20,11
//        找出最大的数,放到第一位(1,2,3,4,5)
//        20,10,8,2,11
//        从剩下的4个数中,找最大的(2,3,4,5)
//        20,11,8,2,10
//        从剩下的3个数中,找最大的(3,4,5)
//        20,11,10,2,8
//        从剩下的2个数中,找最大的(4,5)
//        20,11,10,8,2

上面是老师给的步骤,我没仔细看  先自己想了想

int[] a = {2,10,8,20,11};        
        boolean panDuan = true;
        int num = 0;

        System.out.println("输出原数组:");        //输出原数组
        for (int i : a) {
            System.out.print(i+" ");
        }
        System.out.println();
        while(panDuan)                       //最外层循环 设置成死循环,只有当内层循环判定条件满足后才跳出循环 
        {
            for(int i = 0 ; i<4 ;i++)        //i为 数组下标,因为4是最后一位,如果前面运行正常,是不需要再比较的.所以范围设置为i<4就可以了
            {
                for(int j = 4 ; j>=0 ;j--)    // j同为数组下标,数组下标为i的元素,与数组中的元素,以倒序的顺序依次比较.
                {
                    if(i == j || i > j)            //当i = j 或者 i>j时,如果前面运行正确,是不需要再比较的 ,并且不继续运行下去,所以跳出变量为j的循环,继续执行变量为i的循环
                    {
                        break ;
                    }else if(a[i]<a[j])            //当满足条件,交换两个元素的位置
                    {
                        
                        a[i] = a[i]+a[j];
                        a[j] = a[i] - a[j];
                        a[i] = a[i] - a[j];                    
                    }
                }
            }            
            for(int k = 0 ; k <4 ; k++)            //检测循环   用来判断 现在的数组是否达到条件
            {
                for(int l = 4 ;l >= 0 ; l--)
                {
                    if(k == l || k > l)
                    {
                        break ;
                    }else if(a[k]>a[l])            //判断大小
                    {
                        num++;                   //如果条件正确,num+1
                    }
                }                
            }
            if(num == 10)                        //如果条件都正确,那么num应该加10次,所以 当num=10,将布尔值的panDuan值改成false,就可以跳出while循环.
            {
                panDuan = false;
            }
            num = 0;                            //如果一次循环达到想要的数组,将num归0,继续循环直到正确.                
        }                                             //while 结束括号        
        System.out.println("输出排序后数组:");
        for (int m : a) {
            System.out.print(m+" ");
        }
        
    }
}

(初学java,博客记录为主,轻喷,错误想必不少,如果您能指出,不胜感激,部分内容非原创,来源于百度)

猜你喜欢

转载自www.cnblogs.com/j1639797/p/9581722.html