美文网首页
交换排序之冒泡排序

交换排序之冒泡排序

作者: 你的昵称在简书中已被使用 | 来源:发表于2020-04-27 19:58 被阅读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、稳定性
    稳定的

    相关文章

      网友评论

          本文标题:交换排序之冒泡排序

          本文链接:https://www.haomeiwen.com/subject/enfjwhtx.html