交换排序之冒泡排序

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


交换排序之冒泡排序_第1张图片
图片来自网络

3、代码演示


import java.util.Arrays;

public class MaoPaoSort  {

    public static int[] sort(int[] arr){
        for(int i=0;iarr[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;iarr[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、稳定性
稳定的

你可能感兴趣的:(交换排序之冒泡排序)