魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Algorithm - 排序 - 冒泡排序

文章摘要: 冒泡排序算法是把较小的元素往前调或者把较大的元素往后调。

简介

简要说明

  • 通过重复遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
  • 遍历数列的工作是重复地进行,直到没有再需要交换的元素为止。

主要功能

  • 对一组数据进行排序,使得数据按照升序或降序排列。
  • 通过相邻元素的比较和交换,逐步将最大或最小的元素“冒泡”到数列的一端。

注意事项

  • 冒泡排序的时间复杂度较高,不适合大数据集。
  • 它是一种稳定的排序算法,即相等的元素在排序后不会改变它们的相对顺序。
  • 在实践中,通常会加入一个标志位来检测某一趟排序是否发生了交换,从而优化算法。

适用场景

  • 适用于数据量较小的情况。
  • 适用于需要稳定排序的场合。

时间复杂度

  • 最坏情况: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 标志用于检测某一趟排序是否发生了交换,如果没有交换,则数组已经排序完成,可以提前终止排序。
更新时间: 2025/10/3 17:56