Java排序算法实现----冒泡排序

优化思路参考了该篇博客,写的很好,推荐阅读:冒泡排序算法优化

public class BubbleSort {

    public static void bsa(int[] array){
        int length = array.length;
        int lastSortedIndex = length - 1;
        for (int i=0;i<length;i++){
            boolean isExchanged = false;
            int tempLast = lastSortedIndex;
            for (int j=0;j<lastSortedIndex;j++){
                if (array[j] < array[j+1]){
                    int temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                    isExchanged = true;
                    tempLast = j;
                }
            }
            lastSortedIndex = tempLast;
            if (!isExchanged){
                break;
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {3,4,6,1,7,5,2,34,98};
        bsa(array);
        for (int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }
    }
}

实现流程:每一轮比较把最大(小)的值放到最后,下一轮比较长度减一

优化1:未完成全部循环次数时,数组可能已经有序,设置变量isExchanged判断本轮是否进行了交换,如果没有发生交换,则证明数组已经有序,停止循环即可。

优化2:例如{3,4,5,1,2,6,7,34,98},若升序排列,很明显后四个值无需参与比较,因此每轮循环记录最后一次的发生交换的位置作为下一次的尾部边界,则可保证避免该位置之后所有满足条件的值参与比较。

时间复杂度:O(n²),优化后可达O(n)

空间复杂度:O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值