算法笔记–再回顾冒泡法排序
冒泡法是我们学习编程接触到的第一个排序算法,简单而形象,整个比对过程跟泉水冒泡十分形似。冒泡法排序首先拿第一个元素与相邻元素进行比较,如果它比较大,就相互交换,这样第一轮遍历下来,最大的值就确定了,第n轮也是如此,都是从第一个开始,一直比较到倒数第n个,这样最大的n个就排好了。

解题:用一个数组来表示元素集合
- 拿第一个元素与相邻的元素相比,循环遍历到数组最后,确定最大值
- 拿第一个元素与相邻的元素相比,循环遍历到数组倒数第二个,确定次大值
- 循环遍历直至数组完全排序
时间复杂程度:
- O(n^2)
案例实践
public class BubbleSort {
public static void main(String[] args) {
int[] a = {9,1,2,3,4,7,8,5,6};
// sort(a);
sortOptimize(a);
for (int i = 0; i < a.length; i++) {
System.out.printf("%2d",a[i]);
}
}
private static void sort(int arr[]){
int temp = 0; // 临时变量,交换的时候使用
int length = arr.length - 1; // 总共排序:arr.length - 1
int k = 0;
for (int n = 0; n < length; n++) {
//第二轮遍历到倒数第 n 个
for (int i = 0; i < length - n; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
k++;
}
}
System.out.println("冒泡法循环的次数: " + k);
}
/**
* 冒泡法优化,对于已经排序好的数据可以明显减少循环此时
* @param arr
*/
private static void sortOptimize(int arr[]){
int temp = 0; // 临时变量,交换的时候使用
int length = arr.length - 1; // 总共排序:arr.length - 1
boolean change = false;
int k = 0;
for (int n = 0; n < length; n++) {
change = false;
for (int i = 0; i < length - n; i++) {
if (arr[i] > arr[i + 1]) {
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
change = true;
}
k++;
}
if (!change) {
// 如果 1 轮下来,都没有进行排序,则可以提前退出
break;
}
}
System.out.println("优化冒泡法循环的次数: " + k);
}
}
本文回顾冒泡法排序算法,通过比较相邻元素实现排序,逐步确定最大值。冒泡法时间复杂度为O(n^2)。内容包括冒泡法的步骤解析、数组操作及优化实践。

被折叠的 条评论
为什么被折叠?



