冒泡排序

Bubble Sort

排序算法

📖 算法原理

冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

算法步骤:

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对
  3. 在这一点,最大的元素会"冒泡"到数组的末尾
  4. 针对所有的元素重复以上的步骤,除了最后一个
  5. 重复步骤1~4,直到排序完成

⏱️ 时间复杂度分析

最好情况
O(n)
平均情况
O(n²)
最坏情况
O(n²)
空间复杂度
O(1)

🎯 算法可视化

比较次数
0
交换次数
0
当前轮次
0
排序状态
未开始

💻 代码实现

Java 实现

Java
public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        boolean swapped;
        
        // 外层循环控制排序轮数
        for (int i = 0; i < n - 1; i++) {
            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};
        System.out.println("排序前: " + Arrays.toString(arr));
        
        bubbleSort(arr);
        
        System.out.println("排序后: " + Arrays.toString(arr));
    }
}

Python 实现

Python
def bubble_sort(arr):
    """
    冒泡排序算法
    :param arr: 待排序的数组
    :return: 排序后的数组
    """
    n = len(arr)
    
    # 外层循环控制排序轮数
    for i in range(n - 1):
        swapped = False
        
        # 内层循环进行相邻元素比较
        for j in range(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

# 测试代码
if __name__ == "__main__":
    test_array = [64, 34, 25, 12, 22, 11, 90]
    print(f"排序前: {test_array}")
    
    sorted_array = bubble_sort(test_array.copy())
    print(f"排序后: {sorted_array}")

JavaScript 实现

JavaScript
function bubbleSort(arr) {
    const n = arr.length;
    let swapped;
    
    // 外层循环控制排序轮数
    for (let i = 0; i < n - 1; i++) {
        swapped = false;
        
        // 内层循环进行相邻元素比较
        for (let j = 0; j < n - i - 1; j++) {
            // 如果前面的元素大于后面的元素,则交换
            if (arr[j] > arr[j + 1]) {
                // 交换元素
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
                swapped = true;
            }
        }
        
        // 如果这一轮没有发生交换,说明数组已经有序
        if (!swapped) {
            break;
        }
    }
    
    return arr;
}

// 测试代码
const testArray = [64, 34, 25, 12, 22, 11, 90];
console.log("排序前:", testArray);

const sortedArray = bubbleSort([...testArray]);
console.log("排序后:", sortedArray);

✅ 优缺点分析

优点

  • 算法简单,容易理解和实现
  • 是稳定的排序算法
  • 是原地排序算法,空间复杂度为O(1)
  • 可以检测数组是否已经有序

缺点

  • 时间复杂度较高,为O(n²)
  • 对于大规模数据效率很低
  • 比较次数较多
  • 实际应用中很少使用

🔧 适用场景