排序--冒泡排序(java语言实现)

冒泡排序的改进

上次提到的冒泡排序代码来进行简单的分析;

public static void bubbleSort(int[] arr){
        if(arr==null || arr.length == 1){
            return;
        }
        for(int i = 0;i<arr.length-1;i++){
            for (int j = i+1;j<arr.length;j++){
                if(arr[i] > arr[j])
                    swap(arr,i,j);
            }
        }
    }

如果我们想要排序的序列为{9,1,5,8,3,7,4,6,2}。当i=1时,9与1交换之后,后面的元素均比1大,所以不会发生交换行为,即数列为{1,9,5,8,3,7,4,6,2},当i=2时,首先9与5互换{1,5,9,8,3,7,4,6,2},之后寻找比5小的元素,下一个到3,{1,3,9,8,5,7,4,6,2},再次寻找比3小的元素,{1,2,9,8,5,7,4,6,3},第二次循环结束。开始第三次循环,显而易见,下一个较小的元素即为3,而第二次循环我们却把3交换到了最后一个元素。从这个简单的例子我们可以看出,这个算法的效率确实有点低。我们是从小索引开始比较,从而把可能较小的元素换到了最后,那我们为什么不反过来思考,而从最后的索引开始比较,这样是不是就能把较小的元素换到比较靠前的位置?有这个想法,来简单实现。

public static void bubbleSort(int[] arr){
        if(arr==null || arr.length < 2 ){
            return;
        }
        for(int i = 0;i<arr.length;i++){
            for (int j=arr.length-1;j>i;j--){
                if(arr[j] < arr[j-1])
                    swap(arr,j,j-1);
            }
        }
    }

我们从最后索引开始逐次两个比较,假设还是之前的数列{9,1,5,8,3,7,4,6,2},首先6大于2,6与2互换,下次比较,4大于2,4与2互换,依次比较得到{1,9,2,5,8,3,7,4,6},可以看到2从最后一个位置提到了第三个位置,再进行循环的时候,我们又可以对3的位置进行提升,这样就解决了之前的冒泡的效率低的问题。

对数器测试结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值