• 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] + " ");
            }
    
        }
    }
  • 相关阅读:
    Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
    什么情况下Java程序会产生死锁?
    正确重写hashCode的办法
    浅析JVM类加载机制
    JVM中的新生代和老年代(Eden空间、两个Survior空间)
    解释循环中的递归调用
    get和post方法功能类似的,使用建议
    微信开发(五)微信消息加解密 (EncodingAESKey)
    PostgreSQL远程连接,发生致命错误:没有用于主机“…”,用户“…”,数据库“…”,SSL关闭的pg_hba.conf记录
    struts原理
  • 原文地址:https://www.cnblogs.com/lylhome/p/15766203.html
Copyright © 2020-2023  润新知