文章摘要: 冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。
简介
简要说明
- 通过重复遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
- 遍历数列的工作是重复地进行,直到没有再需要交换的元素为止。
主要功能
- 对一组数据进行排序,使得数据按照升序或降序排列。
- 通过相邻元素的比较和交换,逐步将最大或最小的元素“冒泡”到数列的一端。
注意事项
- 冒泡排序的时间复杂度较高,不适合大数据集。
- 它是一种稳定的排序算法,即相等的元素在排序后不会改变它们的相对顺序。
- 在实践中,通常会加入一个标志位来检测某一趟排序是否发生了交换,从而优化算法。
适用场景
- 适用于数据量较小的情况。
- 适用于需要稳定排序的场合。
时间复杂度
- 最坏情况:O(n^2)
- 平均情况:O(n^2)
- 最好情况(已排序):O(n)
空间复杂度
- O(1),冒泡排序是原地排序算法。
Java 8
public class BubbleSort {
// 主方法调用冒泡排序
public static void main(String[] args) {
int[] array = {64, 34, 25, 12, 22, 11, 90};
bubbleSort(array);
System.out.println("Sorted array: " + Arrays.toString(array));
}
// 冒泡排序方法
public static void bubbleSort(int[] array) {
int n = array.length;
boolean swapped = false;
// 遍历所有数组元素
for (int i = 0; i < n - 1; i++) {
// 最后i个元素已经到位,无需比较
for (int j = 0; j < n - i - 1; j++) {
// 交换找到的相邻元素
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
swapped = true;
}
}
// 如果内循环没有进行交换,说明数组已经排序完成
if (!swapped) {
break;
}
}
}
}
注释
- 在这个Java案例中,
bubbleSort方法实现了冒泡排序算法。它通过两层循环来遍历数组,并在内层循环中进行相邻元素的比较和交换。swapped标志用于检测某一趟排序是否发生了交换,如果没有交换,则数组已经排序完成,可以提前终止排序。