一、核心思想:兩兩交換,小的/大的往前。
二、過程:
第一趟,通過兩兩交換的手段,將最大/小元素頂到最末端
第二趟,…………………………………………,將次大/小元素頂到倒數第二個位置
……
三、時間複雜度:O(n(n-1)/2)
四、空間複雜度:O(1)
五、原址排序
六、穩定性:有相同元素,排序前和排序後相對位置不會變化,穩定。
七、代碼:
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
//生成隨機數組
int arr[]=getRandomArr(10,1,20);
System.out.println("原數組:"+Arrays.toString(arr));
//冒泡排序
bubblesort(arr);
System.out.println("冒泡排序後:"+Arrays.toString(arr));
}
//冒泡排序核心算法
public static void bubblesort(int[] arr) {
//趟數,數組左邊元素
for(int i=0;i<arr.length-1;i++) {
//子趟數,數組右邊元素
for(int j=0;j<arr.length-1;j++) {
//兩兩比較,左邊小於右邊便交換兩者順序,爲什麼排序完爲升序?
if(arr[i]<arr[j]) {
swap(arr,i,j);
}
}
}
}
//生成隨機數組的方法(長度,最小值,最大值)
public static int[] getRandomArr(int length, int min, int max) {
int arr[]=new int[length];
for(int i=0;i<length;i++) {
arr[i]=(int)(Math.random()*(max-1+min)+min);
}
return arr;
}
//兩兩交換的實現方法
public static void swap(int[] arr, int i, int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}