观察元素如何像气泡一样上浮到正确位置
冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地遍历待排序的数列,一次比较两个相邻元素,如果顺序错误就把它们交换过来。每一轮遍历后,最大的元素会"浮"到数组末尾,就像水中的气泡上浮一样。
| 情况 | 时间复杂度 | 说明 |
|---|---|---|
| 最好情况 | O(n) | 数组已经有序,只需一次遍历 |
| 平均情况 | O(n²) | 需要多次遍历和交换 |
| 最坏情况 | O(n²) | 数组完全逆序 |
| 空间复杂度 | O(1) | 只需常数级额外空间(原地排序) |
冒泡排序是稳定排序,相等元素的相对顺序不会改变。
def bubble_sort(arr): """冒泡排序算法""" n = len(arr) for i in range(n): swapped = False # 每轮将最大元素"冒泡"到末尾 for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: # 交换相邻元素 arr[j], arr[j + 1] = arr[j + 1], arr[j] swapped = True # 如果没有交换发生,数组已有序 if not swapped: break return arr # 使用示例 arr = [64, 34, 25, 12, 22, 11, 90] print(bubble_sort(arr)) # 输出: [11, 12, 22, 25, 34, 64, 90]
public class BubbleSort { /** * 冒泡排序算法 * @param arr 待排序数组 */ public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) { boolean swapped = false; // 每轮将最大元素"冒泡"到末尾 for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换相邻元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = true; } } // 如果没有交换发生,数组已有序 if (!swapped) { break; } } } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); System.out.println(Arrays.toString(arr)); // 输出: [11, 12, 22, 25, 34, 64, 90] } }