原理 : 依次比较相邻的两个数,将小数放在前面,大数放在后面。
复杂度: 最差–>O(n2)/ 平均–> O(n2) /稳定性–> 稳定
示意图 :
原数组:[10, 3, 2, 1, 0, 5, 4, 7, 8, 9]
第1次:[3, 10, 2, 1, 0, 5, 4, 7, 8, 9]
第2次:[3, 2, 10, 1, 0, 5, 4, 7, 8, 9]
第3次:[2, 3, 1, 10, 0, 5, 4, 7, 8, 9]
第4次:[2, 1, 3, 0, 10, 5, 4, 7, 8, 9]
第5次:[1, 2, 0, 3, 5, 10, 4, 7, 8, 9]
第6次:[1, 0, 2, 3, 5, 4, 10, 7, 8, 9]
第7次:[0, 1, 2, 3, 4, 5, 7, 10, 8, 9]
第8次:[0, 1, 2, 3, 4, 5, 7, 8, 10, 9]
第9次:[0, 1, 2, 3, 4, 5, 7, 8, 9, 10]
我们观察 “10 “ 这个数字是不是就像一个气泡慢慢的浮上来了呢!很形象是吧!
代码
public class BubbleSort { public static void bubble_sort(int arr[]) { for(int i = 1; i < arr.length; i++) { int temp = 0; for(int j = 1; j <= i; j++) { if(arr[j-1] > arr[j]) { temp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } System.out.print("第" + i + "次:"); System.out.println(Arrays.toString(arr)); } } public static void main(String[] args) { int arr[] = {10, 3, 2, 1, 0, 5, 4, 7, 8, 9}; // int arr[] = new int[] {10, 3, 2, 1, 0, 5, 4, 7, 8, 9}; System.out.println("原数组:"); System.out.println(Arrays.toString(arr)); BubbleSort.bubble_sort(arr); System.out.println("现数组:"); System.out.println(Arrays.toString(arr)); } }
结果
原数组: [10, 3, 2, 1, 0, 5, 4, 7, 8, 9] 第1次:[3, 10, 2, 1, 0, 5, 4, 7, 8, 9] 第2次:[3, 2, 10, 1, 0, 5, 4, 7, 8, 9] 第3次:[2, 3, 1, 10, 0, 5, 4, 7, 8, 9] 第4次:[2, 1, 3, 0, 10, 5, 4, 7, 8, 9] 第5次:[1, 2, 0, 3, 5, 10, 4, 7, 8, 9] 第6次:[1, 0, 2, 3, 5, 4, 10, 7, 8, 9] 第7次:[0, 1, 2, 3, 4, 5, 7, 10, 8, 9] 第8次:[0, 1, 2, 3, 4, 5, 7, 8, 10, 9] 第9次:[0, 1, 2, 3, 4, 5, 7, 8, 9, 10] 现数组: [0, 1, 2, 3, 4, 5, 7, 8, 9, 10] Process finished with exit code 0
附加
数组的初始化:
// 直接初始化 int arr[] = {10, 3, 2, 1, 0, 5, 4, 7, 8, 9}; int arr[] = new int[] {10, 3, 2, 1, 0, 5, 4, 7, 8, 9}; //先声明在初始化 int[] a = new int[2];//需要指定数组的长度 a[0] = 1; a[1] = 2;