为什么冒泡排序的复杂度是O(n^2)?

2023-12-07

据我了解,算法的复杂度是排序时执行的最大操作数。因此,冒泡排序的复杂度应该是算术级数(从1到n-1)的总和,而不是n^2。 以下实现计算比较次数:

public int[] sort(int[] a) {
    int operationsCount = 0;
    for (int i = 0; i < a.length; i++) {
        for(int j = i + 1; j < a.length; j++) {
            operationsCount++;
            if (a[i] > a[j]) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    System.out.println(operationsCount);
    return a;
}

具有 10 个元素的数组的输出是 45,因此它是从 1 到 9 的算术级数的总和。

那么为什么冒泡排序的复杂度是 n^2,而不是 S(n-1) ?


这是因为大 O 表示法描述了算法的本质。扩展中的主要术语(n-1) * (n-2) / 2 is n^2。又如n增加所有其他项变得微不足道。

欢迎您更准确地描述它,但出于所有意图和目的,该算法表现出行为这是顺序n^2。这意味着如果你将时间复杂度与n,你会看到一条抛物线增长曲线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么冒泡排序的复杂度是O(n^2)? 的相关文章

随机推荐

  • 使用 R 从 API 中提取数据

    我可以访问 azure 中的一些遥测数据 特别是使用移动应用程序的客户的所有 API 调用 我已经使用 R 中的 httr 包来请求 3 分钟内的数据 并像这样评估响应 显然有我自己的应用程序 ID 和密钥 下面我没有包含 install
  • MySQL INNER JOIN 仅从第二个表中选择一行

    我有一个users表和一个payments表中 对于每个有付款的用户 在表中可能有多个关联的付款payments桌子 我想选择所有有付款的用户 但只选择他们最新的付款 我正在尝试这个 SQL 但我以前从未尝试过嵌套 SQL 语句 所以我想知
  • 如何获取另一个jar中的资源

    我有一个嵌入在捆绑包中的 jar 需要获取与其打包的资源 如下所示 MyBundle src lib MyEmbeddedJar src SomeClass someResource xml 我正在尝试从 SomeClass 访问 some
  • 使用 Macports 偷偷修补源代码

    几乎自从我使用 vim 并了解了足够多的 C 语言以来 我就自定义了已安装的 vim 以删除令我烦恼的 功能 当我改用带有 macports 的 Mac 时 我通过卸载以前的任何 vim 端口 获取源代码 手动编辑源代码 然后让 Macpo
  • Typescript 部分类型推断

    我对此感到困惑 无法弄清楚如何在没有第二个功能的情况下做到这一点 interface Fixed a number const fn
  • Rust HRTB 是相同的,但编译器表示一种类型比另一种更通用

    The 以下代码是完整的类型注释 fn enter lt a F R gt x a i32 func F gt R where F for lt b gt FnOnce b i32 gt R func x fn identity lt a
  • 访问类型声明对释放的影响

    在这两种情况下 在声明块之后 当然是在过程结束之前 是否以相同的方式释放内存 procedure allocation is type T Integer Access is access Integer begin declare P T
  • 如何将 HTML 内容设置到 iframe 中

    我有一个 HTML 字符串 Hello world 我想用 JavaScript 将其设置为 iframe 我试图像这样设置 HTML contentWindow document body innerHTML or contentDocu
  • 变量+=值和变量=变量+值之间的区别;

    例如 int a 10 a 1 5 这运行得很完美 但是 a a 1 5 这个作业说Type mismatch cannot convert from double to int 所以我的问题是 有什么区别 operator and ope
  • 无法加载现代控件 UI。升级到最新版本的 Android YouTube API

    我正在尝试使用Android Youtube API 一切正常 除了当我扩展时AppCompatActivity YoutubePlayer 的 UI 看起来很糟糕 我都尝试过YoutubePlayerFragment and Youtub
  • GIT - 如何合并分支?

    我们决定在公司使用 GIT 但现在遇到了问题 我们有多个分行 各具特色 现在我们需要的是合并这些分支并将其推送到 Master 我们如何使用自动替换来做到这一点 我们有分支 a 分支 b 分支 c 我们需要将它们全部放入主文件中 但如果出现
  • Java - 循环二维数组来查找不起作用的值的索引

    我知道我在这段代码中的某个地方犯了错误 但我无法弄清楚 玩家1 getId 返回值 1 只是为了让您知道 我正在尝试打印值为 1 的数组的索引 在代码末尾 我预计 currentX 为 0 currentY 为 0 但它们都是 9 任何帮助
  • Cx_Freeze 构建不包括 zip 文件中的 python 库

    我在使用 cx Freeze 5 0 时遇到了麻烦 我正在尝试 Windows 10 LTSB x64 Python 3 4 4 x86 PyQt5 PyWin32 x86 在我重新安装 Windows 10 之前 这个过程从未遇到过任何问
  • 无法在我的 Windows 10 上安装“Turicreate”

    我是 Python 新手 我正在尝试按照教程构建推荐引擎 教程要求我安装 turicreate 我在 Anaconda 上运行 Spyder 3 3 0 Python 版本 3 5 我尝试过的 我从各种 SO 问题以及 github 中寻求
  • 如何监控特定应用程序的网络带宽使用情况?

    我正在尝试学习如何监视特定应用程序的网络带宽使用情况 我正在看IPv4InterfaceStatistics 但这似乎是监视网卡的性能 我想监视特定应用程序以查看每秒消耗多少带宽 有谁知道如何做到这一点的例子 using System us
  • 如何为 R igraph 中的某些边分配边权重

    我想为最短路径中使用的某些边分配一个小的非负边权重 这是一个示例图 library igraph data lt read table text 1 2 1 4 1 5 2 3 2 4 3 4 5 7 5 8 3 6 header FALS
  • 如何在 pl/pgsql 中获取 foreach 中的当前键?

    我迭代一个数组 并对数组值及其键执行一些操作 从PostgreSQL 9 1开始有了foreach循环 所以数组值没有问题 但是有什么优雅的方法来获取key吗 我发现的唯一解决方案是为此维护额外的变量 CREATE OR REPLACE F
  • 验证用户名的正则表达式

    我正在尝试创建一个正则表达式来根据这些条件验证用户名 仅包含字母数字人物 下划线 and dot 下划线和点不能位于end or start用户名 例如 username username username username 下划线和点不能
  • Option::map 的结果寿命不够长

    我希望下面的两个函数是等效的 但是第一个无法编译 pub fn does not work
  • 为什么冒泡排序的复杂度是O(n^2)?

    据我了解 算法的复杂度是排序时执行的最大操作数 因此 冒泡排序的复杂度应该是算术级数 从1到n 1 的总和 而不是n 2 以下实现计算比较次数 public int sort int a int operationsCount 0 for