3 冒泡排序
3.1 冒泡排序原理
- 如果上篇文章的选择排序对于升序来讲是每次先排好较小的元素,那么本篇文章所讲的冒泡排序或许可以称之为每次先排好较大的元素。
- 那么顾名思义,“冒泡”可以理解为在排序过程中(升序)总有一个比周围大的元素在从前往后不断蹦哒,不断地和后面比他小的元素交换位置,好比鱼在水里边游边吐泡泡。
- 或许我们可以看个例子加深理解:
3.2 冒泡排序示例
int[] arr = {7, 2, 3, 8, 1};
System.out.println("未排序数组:" + Arrays.toString(arr));
// 外循环中可将条件里的arr.length-1看作一个整体 并代入到内循环理解
for (int i = 0; i < arr.length - 1; i++) {
// 内循环排序:取外循环i值作为条件,i值可看作为数组中末尾已排序完成的较大值的数量
// 当进行到下一轮排序时,无需再次进行末尾元素的排序而只需关注前面未排序完成的元素集合
// 那么-1是因为两两进行比较,当取到末尾元素时下标不能越界(注意j+1不能大于array.length-1)
for (int j = 0; j < arr.length - 1 - i; j++) {
// 如前位元素大于后位元素 则前位元素后移
// 如此一轮结束即可取到最大值并放置末尾
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
System.out.println("第" + (i + 1) + "轮排序过程:" + Arrays.toString(arr));
}
}
System.out.println("第" + (i + 1) + "轮排序完成");
}
运行结果:
未排序数组:[7, 2, 3, 8, 1]
第1轮排序过程:[2, 7, 3, 8, 1]
第1轮排序过程:[2, 3, 7, 8, 1]
第1轮排序过程:[2, 3, 7, 1, 8]
第1轮排序完成
第2轮排序过程:[2, 3, 1, 7, 8]
第2轮排序完成
第3轮排序过程:[2, 1, 3, 7, 8]
第3轮排序完成
第4轮排序过程:[1, 2, 3, 7, 8]
第4轮排序完成