在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序
java自带的Array包里面带得有Array.sort()方法
public static void main(String[] args) {
int[] array = new int[10];
Random random = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(10);
}
System.out.println(Arrays.toString(array));
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
它的图示:
泡沫排序的代码实现:
public static void bubbleSort(int[] array){
boolean flg = true;//某一趟发生了交换的标记符
for (int i = 0; i < array.length-1; i++) { //表示趟数
for (int j = 0; j < array.length-1-i ; j++) { //表示每一趟
//-i:每次排完一轮,最后一个就是最大的,他下一次就不需要排序
if (array[j] > array[j+1]) {
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
flg = false;
}
}
//如果flg没有改变了,仔细思考他是不是证明它已经有序,跳出循环
if (flg)break;
}
}
代码的优化有两点:1、每次排完,最后一个是不需要排的
2、如果其中一趟没有发生排序,证明他已经有序
时间复杂度:O(N^2) 如果有序:O(N)
空间复杂度:O(1)