Java算法之冒泡排序

冒泡排序是一种计算呼科学领域的较简单的排序算法,它重复的走访过要排序的数列,一次比较两个相邻的元素,如果他们排序错误,就把他们交换过来。

假设有一个一维数组{15,20,17,18,16,27,23}用冒泡排序的方式将他们从小到大排序。

第一次比较:    循环次数:1      比较次数: 6
15,17,18,16,20,23,27
此次比较出27是数组中最大元素,放在最后下一次比较27不再参加比较。

第二次比较:    循环次数:2     比较次数:5
15,17,16,18,20,23
此次比较出23是最大的元素,放在最后,23不再参与到下一次的比较中。


第三次比较:   循环次数:3   比较次数:4
15,16,17,18,20
此次比较出20是最大的元素,放在最后,23不再参与到下一次的比较中。

第四次比较:   循环次数:4   比较次数:3
15,16,17,18
此次比较出18是最大的元素,放在最后,18不再参与到下一次的比较中。

第五次比较   循环次数:5   比较次数:2
15,16,17
此次比较出17是最大的元素,放在最后,17不再参与到下一次的比较中。

第六次比较   循环次数:6   比较次数:1
15,16
此次比较出16是最大的元素,放在最后,16不再参与到下一次的比较中。此时还剩一个元素”15”是数组中的最小的元素

循环次数:数组长度-1
比较次数+循环次数 = 数组长度


冒泡排序算法如下:

 public static void main(String[] main){
        int []array = {15,20,17,18,16,27,23};
        System.out.println("排序前的数组");
        System.out.println(Arrays.toString(array));
        //冒泡排序的算法
        //控制数组的循环次数
        for(int i=0;i<array.length-1;i++){
            //控制比较次数
            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("数组冒泡排序后:");
        System.out.println(Arrays.toString(array));
    }

运行结果如下:

排序前的数组
[15, 20, 17, 18, 16, 27, 23]
数组冒泡排序后:
[15, 16, 17, 18, 20, 23, 27]

如果说数组本身就是有序的在用上面的算法会浪费很多的时间,可以采用如下的算法:

    public static void main(String[] main){
      int[] array = {1,2,3,4,5,6};
        System.out.println("排序前的数组");
        System.out.println(Arrays.toString(array));
        //设置数组为有序的
        boolean flag = false;
        /**
         * 如果数组排序一次为无序,继续排序
         * 如果排序一次依然为有序,跳出循环,直接输出
         */
        for(int i=0;i<array.length-1;i++){
            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;
                    //设置数组是无序的
                    flag = true;
                }
            }
            if(!flag){
                //判断数组合是否有序,有序跳出循环
                break;
            }
        }
        System.out.println("冒泡排序后的数组为:");
        System.out.println(Arrays.toString(array));
    }

运行结果如下:

排序前的数组
[1, 2, 3, 4, 5, 6]
冒泡排序后的数组为:
[1, 2, 3, 4, 5, 6]

推荐使用第二种方法


以上是我对冒泡排序的理解,如有不对还请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值