• Java冒泡排序


    /*
    冒泡排序
        其原理是:第一个数与第二个数比较大小,如果第一个数大于第二个数就交换位置(小于等于不交换)
                  然后拿交换位置后的第二个数与第三个数比较大小,如果第二个数大于第三个数就交换位置(小于等于不交换)
                  一直比较到最后,这样比较交换位置之后,最后一个数一定是数组中最大的那个数字;这样开始进行下一轮的比较交换,再次将
                  剩余元素中最大的那个数字排到最后,每一轮比较交换都会挑选出剩余元素中最大的那个数字。这样经过array.length-1轮
                  比较交换就能完成排序,每一轮的比较次数都是参与排序的元素个数-1次。
     */
    public class 冒泡排序 {
        public static void main(String[] args) {
    //        静态初始化一个int数组
            int[] array = {15,7,3,12,6,9,8};
    //        采用冒泡排序对其进行排序
            int count1 = 0; //为了统计对比次数,打标记
            int count2 = 0; //为了统计交换次数,打标记
    //        需要进行"array.length-1"轮对比,外层循环这样写是为了内层循环打基础
            for (int i = array.length-1; i > 0; i--) {
                for (int j = 0; j < i; j++) {
                    //对比次数自加1
                    count1 ++;
                    if (array[j] > array[j + 1]){
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        //每次交换自加1
                        count2 ++;
                    }
                }
            }
            //打印比较次数
            System.out.println("比较次数:" + count1);
            //打印交换次数
            System.out.println("交换次数:" + count2);
    //        对排序后的数组进行遍历
            for (int i = 0; i < array.length; i++) {
                //每打印一个元素后面增加一个空格用来分隔元素
                System.out.print(array[i] + " ");
            }
        }
    }

    /*

    程序运行结果:

            比较次数:21
            交换次数:12
            3 6 7 8 9 12 15 

    */

    另外一种写法:

    /**
     * 冒泡排序
     */
    public class bubbleSort {
        public static void main(String[] args) {
            //对该数组中的元素按照从小到大的顺序排序
            int[] array = new int[]{9,26,5,17,33,22,26,55,39,11,26};
            /**
             * 数组的长度是length=11,需要进行length-1轮的比较,(每轮比较都会选出相对最大的数,下一轮该数就不需要参与比较了)
             * 第一轮比较的次数是length-1,每轮比较的次数都减少1次
             * 比较规则是两个数进行比较,第一个数如果大于第二个数,则两个数交换位置,大数逐渐向右冒泡。
             */
            for (int i = 0;i < array.length -1;i++){    //length=11,这里进行(0~9共计10轮循环)
                for (int j = 0; j < array.length-1-i;j++){
                    if (array[j] > array[j+1]){     //如果第一个数大于第二个数
                        //借助第三方变量使两个数互换位置
                        int temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(array));
        }
    }

    /*

    程序运行结果:

            [5, 9, 11, 17, 22, 26, 26, 26, 33, 39, 55]

    */

  • 相关阅读:
    创建型模式-原型模式(五)
    vscode ctrl+鼠标左键无法跳转
    基于java+ssm+vue+mysql的旅游管理系统
    自动拟人对话机器人在客户服务方面起了什么作用?
    桥接模式(Bridge Pattern) C++
    go语言和redis数据库
    LeetCode 周赛上分之旅 #49 再探内向基环树
    nvm报错获取 ‘https://npm.taobao.org/mirrors/node/index.json‘ 时失败
    Vue练习CRUD
    【算法|动态规划No.11】leetcode53. 最大子数组和
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/128201477