冒泡排序的思想并不难,举个例子,加入存在数组{12, -58, 24, -8, 0, 65, 31},在第一次冒泡时,底部的数逐层往上进行比较,如果左侧的数大于右侧的数,就交换位置,到顶部时整个数组的最大值就出现在了顶部,之后再开始新一轮的从底部冒泡,获得数组的第二大值,第三大值...
由此可知,如果存在2个数,进行一次冒泡就可以获得有序数组;如果存在三个数,进行两次冒泡就可以获得有序数组;以此类推,如果存在N个数,就进行N-1次冒泡就可以获得有序数组;每次冒泡时,数值与数值之间需要进行两两比较,如果左侧数值比右侧数值大,就交换位置。如果存在N个数,在第一次冒泡时,每个数值都要比较,需要比较N-1次;第二次冒泡时,由于已经在第一次冒泡时已经获取到了数组的最大值,所以此时是在对N-1个数做比较,需要比较N-2次,以此类推。
用Java代码实现:
package com.atguigu.java;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[] { 12, -58, 24, -8, 0, 65, 31 };
BubbleSort bub = new BubbleSort();
bub.bubSort(arr);
}
public void bubSort(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;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
结果如下: