交换排序-冒泡排序算法

交换排序-冒泡排序

这个超级简单,我就不BB了直接上代码。A是原始风味的冒泡排序,B是简单优化后的冒泡排序。

public static void main(String[] args) {
        /**
         * totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的所有 内存。
         * 如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,
         * 直 挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,
         * 程序在启动的时候就会无条件的从操作系统中挖- Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。
         */
        int [] nums = new int[NUMBER];
        numberFactory(NUMBER,nums);
        Runtime r = Runtime.getRuntime();
        r.gc();//垃圾回收
        Long startTime = System.currentTimeMillis();//开始时间
        Long startMem = r.freeMemory();

        bubbleSortA(nums);
        Long endTime1 = System.currentTimeMillis();//结束时间
        Long endMem1 = r.freeMemory();
        System.out.println("冒泡排序用时: "+(endTime1-startTime));
        System.out.println("冒泡排序使用内存:"+(endMem1 - startMem));
        System.out.println(Arrays.toString(nums));
    }
    static final int[] bubbleSortA(int [] nums){
        for(int i=0,length = nums.length-1;i<length;i++){
            for(int j=0;j<length;j++){
                if(nums[j]>nums[j+1]){
                    int temp = nums[j];
                    nums[j] = nums[i+1];
                    nums[j+1] = temp;
                }
            }
        }
        return nums;
    }
    static final int[] bubbleSortB(int[] nums){
        int number = nums.length-1;
        for(int i=0;i<number;i++){
            Boolean x = true;
            for(int j=0;j<number;j++){
                int temp = nums[j];
                nums[j] = nums[j+1];
                nums[j+1] = temp;
                number = j+1;
                x = false;
            }
            if(x){
                break;
            }
        }


        return nums;
    }

bubbleSortB中的优化很简单,在if中的判断增加了一个数值,最后记录下的数值,就是这一波的冒泡过程中最后一个交换位置的元素,之后没有动的元素说明他们是已经排好序的,这样就避免了重复的比较,布尔值,如果这一次循环下来一次都没有交换元素,说明已经全部都符合要求了,也就不需要再去继续下去了,break跳出循环。
阿西吧,多练练,多看看,中会变成大牛,子曰:学而时习之,不亦说乎。现在用不到,迟早用得到。写他就对了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值