java 冒泡排序

之前学过冒泡排序,但没仔细想过,也没怎么练习。

如果突然让我写个冒泡排序,肯定是手忙脚乱,要不断“试错”试出来一个正确答案。

今天分析、总结一下冒泡排序的编程思路和写法。

冒泡排序具体的思想就不列举了,我只列出由想到写的过程,整理出一份便于理解,便于记忆的模板,以后用到了可以来复习。

for for if 交换,就这么几个流程,关键就是两个循环控制变量的取值范围

class BubbleSorting {
    public static void main(String[] args) {
        int[] num = {24,13,34,688,35,877,64,8,346,-21,59,-31};
        System.out.println("原数组如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }
        System.out.println();



        //j代表数组下标
        //第1轮,j从0开始,一直到len-2,询问num[j]是否大于num[j+1],如果大于,交换
        //最终,len-2和len-1比较大小,得到了最大的数,并放到了len-1的位置
        //第2轮,j从0开始,一直到len-3,询问num[j]是否大于num[j+1],如果大于,交换
        //最终,len-3和len-2比较大小,得到了最大的数,并放到了len-2的位置
        //第i轮,j从0开始,一直到len-1-i,询问num[j]是否大于num[j+1],如果大于,交换
        //最终,len-1-i和len-i比较大小,得到了最大的数,并放到了len-i的位置
        //一共有len-1轮,i从1到len-1

        for (int i = 1;i <= num.length - 1; i++) {
        //总共len-1轮,1 <= i <= len-1
            for (int j = 0; j <= num.length - 1 - i; j++) {
            //j是两两比较的前者,j的范围从0开始,到下标为len-2的元素结束,并且每一轮都会少比较一个, 0 <= j <= len-2-(i-1)
                if (num[j] > num[j + 1]) {
                    int tmp = num[j];
                    num[j] = num[j + 1];
                    num[j + 1] = tmp;
                }
            }
        }

        //总结,遇到麻烦的需求,不要直接开始动手,先找到规律。
        //一轮一轮地整理,什么变什么不变,找到变量,进行替换,最终总结出规律

        System.out.println("从小到大排序如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }
        System.out.println();

        //如果改成从大到小排序,分析如下
        //i代表轮数,不变
        //j代表两两比较的前者,比较的过程也不变,j不变
        //需要修改的是if的条件判断,上面的代码表示的是向更大的地方“冒泡”,现在要改成向更小的地方“冒泡”
        //把if (num[j] > num[j + 1]) 修改成 if (num[j] < num[j + 1]) 即可

        for (int i = 1;i <= num.length - 1; i++) {
        //总共len-1轮,1 <= i <= len-1
            for (int j = 0; j <= num.length - 1 - i; j++) {
            //j是两两比较的前者,j的范围从0开始,到下标为len-2的元素结束,并且每一轮都会少比较一个, 0 <= j <= len-2-(i-1)
                if (num[j] < num[j + 1]) {
                    int tmp = num[j];
                    num[j] = num[j + 1];
                    num[j + 1] = tmp;
                }
            }
        }
        System.out.println("从大到小排序如下:");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }

    }
}
原文地址:https://www.cnblogs.com/lylhome/p/15766203.html