交换排序之冒泡排序

2020-04-27  本文已影响0人  你的昵称在简书中已被使用

1、比较方法:先相邻的两个相比,大的放后面,把这一行都比完,最后一个数一定是最大的,然后第二次按此规则比较前length-1个,第二大的数放到了倒数第二个位置,以此类推,最后剩两个数未比大小时,只需最后比较一下他俩。
2、图解


图片来自网络

3、代码演示


import java.util.Arrays;

public class MaoPaoSort  {

    public static int[] sort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            //比如十个数比九次
            for(int j=0;j<arr.length-i-1;j++){
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        return arr;
    }

    public static void main(String[] args) {
        int arr[]={9,8,7,6,5,4,3,2,1};
        System.out.println(Arrays.toString(sort(arr)));
    }
}

3'、代码优化

  public static int[] sort1(int[] arr){
        boolean flag=true;
        for(int i=0;i<arr.length-1;i++){
            //比如十个数比九次
            for(int j=0;j<arr.length-i-1;j++){
//加个🚩判断是否排好,不过代码量增加
                flag=true;
                if(arr[j]>arr[j+1]){
//这样不用临时变量就可以直接更改值,但是可能出现越界
                   arr[i]=arr[i]+arr[j];
                   arr[j]=arr[i]-arr[j];
                   arr[i]=arr[i]-arr[j];
                    flag=false;
                }
            }
            if(flag){break;}
        }
        return arr;
    }

4、时间复杂度
未优化前:
最好时间复杂度:O(n2)
最坏时间复杂度:O(n2)
平均时间复杂度:O(n2)
优化后:
最好时间复杂度:O(n)
最坏时间复杂度:O(n2)
平均时间复杂度:O(n2)
5、空间复杂度
优化前O(1)
优化后O(0)
有人会说这个空间复杂度能降到0,因为空间复杂度主要是看使用的辅助内存,如果没有辅助内存变量,那么可以说空间复杂度为0;所以该算法中空间复杂度一般是看交换元素时所使用的辅助空间;
6、稳定性
稳定的

上一篇 下一篇

猜你喜欢

热点阅读