冒泡排序以及优化

冒泡排序是新手小白学的第一个排序方法,复杂度很高。那么如何在冒泡排序的基础上对其进行优化?
我们给一组数据:9,5,6,7,5,3
第一次冒泡:9和5交换位置(5,9,6,7,5,3);9和6交换位置(5,6,9,7,5,3);9和7交换位置(5,6,7,9,5,3);9和5交换位置(5,6,7,5,9,3);9和3交换位置(5,6,7,5,3,9)。到此9已经排好了,一个比较了5次。
第二次冒泡(初始数据为5,6,7,5,3,9):5没有6大,所有5和6不用交换;6和7比较也不用交换;7和5交换位置(5,6,5,7,3,9);7和3交换位置(5,6,5,3,7,9)。由于9是所有数比下来的一个结果,所以7和9没有比较的必要,到此7也排好了,一个比了4次。
第三次冒泡(初始数据5,6,5,3,7,9):5没有6大,所以5和6不用交换位置,6和第二个5比较后交换位置(5,5,6,3,7,9);6和3交换位置(5,5,3,6,7,9)。根据第二次处理后面数字的原理我们也不用比较6,7,9的大小,所以到此6就排好了,一共比较了三次。
第四次冒泡(初始数据为5,5,3,6,7,9):5和5不用换,第二个5和三交换(5,3,5,6,7,9)。一共比了两次。
第五次冒泡就排好了。
这是正常情况下的冒泡,我们一直要冒泡5次,但如果第一次冒泡后数组就有序了,我们就可以不用做剩下的几次冒泡。也就是说如果在某一次数字全部交换完毕后数组有序了,那么下次一定不会交换数据,这时我们就可以退出冒泡。
代码实现:

public static void sort(int[] array){
        int temp = 0;
        boolean flag = false;
        //五个数据比四次
        //每次都比上次少比一次
        for(int i = 1;i < array.length;i++){
            flag = false;
            for(int j = 0;j < array.length - i;j++){
                if(array[j] > array[j+1]){
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = true;
                }
            }
            if(flag == false){
                return;
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值