文章内容发布于 1 天前;最后修改于 1 日前。其中的信息可能发生变化或产生更改,敬请留意。
冒泡排序算法(java)
逻辑
- 遍历数组,比较相邻的两个元素。
- 每一轮遍历后,当前未排序部分会"冒泡"到正确的位置([标准冒泡算法]数组末尾,[反向冒泡算法]数组前列)。
- 重复上述过程,但每轮比较的区间长度减 1(因为末尾/前列已排序的部分无需再比较)。
标准冒泡排序算法(Bubble Sort)
for (int i = 0; i < arr.length - 1; i++) {
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;
}
}
}
标准反向冒泡算法(Reverse Bubble Sort)
for (int i = 0; i < arr.length - 1; i++) {
for (int j = arr.length - 1; j > i; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
总结
两种实现都是正确的冒泡排序变体:
- 标准冒泡:大元素向后移动(下沉)
- 反向冒泡:小元素向前移动(上浮)
两种算法的时间复杂度都是O(n²),空间复杂度都是O(1)。反向冒泡在某些情况下可能比标准冒泡少几次交换,但本质上性能相同。