1缸沃、比較方法:先相鄰的兩個相比,大的放后面修械,把這一行都比完趾牧,最后一個數(shù)一定是最大的,然后第二次按此規(guī)則比較前l(fā)ength-1個肯污,第二大的數(shù)放到了倒數(shù)第二個位置翘单,以此類推,最后剩兩個數(shù)未比大小時蹦渣,只需最后比較一下他倆哄芜。
2、圖解
3柬唯、代碼演示
import java.util.Arrays;
public class MaoPaoSort {
public static int[] sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
//比如十個數(shù)比九次
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'认臊、代碼優(yōu)化
public static int[] sort1(int[] arr){
boolean flag=true;
for(int i=0;i<arr.length-1;i++){
//比如十個數(shù)比九次
for(int j=0;j<arr.length-i-1;j++){
//加個??判斷是否排好,不過代碼量增加
flag=true;
if(arr[j]>arr[j+1]){
//這樣不用臨時變量就可以直接更改值,但是可能出現(xiàn)越界
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锄奢、時間復雜度
未優(yōu)化前:
最好時間復雜度:O(n2)
最壞時間復雜度:O(n2)
平均時間復雜度:O(n2)
優(yōu)化后:
最好時間復雜度:O(n)
最壞時間復雜度:O(n2)
平均時間復雜度:O(n2)
5失晴、空間復雜度
優(yōu)化前O(1)
優(yōu)化后O(0)
有人會說這個空間復雜度能降到0,因為空間復雜度主要是看使用的輔助內(nèi)存拘央,如果沒有輔助內(nèi)存變量涂屁,那么可以說空間復雜度為0;所以該算法中空間復雜度一般是看交換元素時所使用的輔助空間灰伟;
6拆又、穩(wěn)定性
穩(wěn)定的