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、稳定性
稳定的