排序之交换排序(冒泡排序)

思想:

冒泡排序就是对一组待排序数两两比较,将他们按照升序或降序排序直到数据有序

就是这样通过两两对比的方式将最大值放到最后一个位置,第二轮就是将倒数第二大的值放到倒数第二个的位置直到数据有序 ,我们可以分析出要排序这7个数,那么我们需要循环6趟这样的过程,因为如果只剩下最后一个数那么一定是排好了的,那么我们可以写代码:

    public void bubbleSort(int[] 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 tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }
    }

注意这里的j为什么是<数组长度-1是因为从下标0开始,那为什么还要-i呢?

是因为我们经过之前的i趟那么最后i个数已经是有序的了不需要我们再次比较所以-i

再想想我们还能不能再优化这个代码呢?

想想看要是我们的数列在第一趟交换中已经全部有序,那么还有必要继续进行吗,所以我们可以使用一个标记来看看这趟交换中有没有进行交换,若是都没有进行交换的话那就说明已经有序了,这个时候我们就及时止损,看下面这个代码:

    public void bubbleSort(int[] array){
        for (int i = 0; i < array.length-1; i++) {
            boolean flg = false;
            for (int j = 0; j < array.length-1-i; j++) {
                if(array[j]>array[j+1]){
                    flg = true;
                    int tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
            if(flg = false){
                break;
            }
        }
    }

如果有发生交换flg会变为true所以我们在出内层循环后只需要判断flg就知道是否发生了交换。

冒泡排序时间复杂度:O(n^2)

               空间复杂度:O(1)

               稳定性:稳定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子健变于晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值