菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

DSA 冒泡排序时间复杂度


有关时间复杂度的通用解释,请参阅上一页


冒泡排序时间复杂度

冒泡排序算法在最坏情况下需要对长度为 \(n\) 的数组进行 \(n-1\) 次遍历。

第一次遍历时,算法会将每个元素与下一个元素进行比较,如果左边的值大于右边的值,则交换它们。这意味着最大的值会“冒泡”到最后,并且未排序的数组部分会越来越短,直到排序完成。因此,在平均情况下,当算法遍历数组进行比较和交换值时,会考虑 \(\frac{n}{2}\) 个元素。

我们可以开始计算冒泡排序算法对 \(n\) 个值的操作次数:

\[操作次数 = (n-1)\cdot \frac{n}{2} = \frac{n^2}{2} - \frac{n}{2} \]

在考虑算法的时间复杂度时,我们关注非常大的数据集,这意味着 \(n\) 是一个非常大的数字。对于一个非常大的数字 \(n\),\(\frac{n^2}{2}\) 项会比 \(\frac{n}{2}\) 项大得多。大到我们可以通过简单地移除第二项 \(\frac{n}{2}\) 来进行近似。

\[操作次数 = \frac{n^2}{2} - \frac{n}{2} \approx \frac{n^2}{2} = \frac{1}{2} \cdot n^2 \]

当我们在这里使用大 O 符号来分析时间复杂度时,因子会被忽略,因此 \(\frac{1}{2}\) 这个因子会被省略。这意味着冒泡排序算法的运行时间可以使用大 O 符号来描述,如下所示:

\[ O( \frac{1}{2} \cdot n^2) = \underline{\underline{O(n^2)}} \]

描述冒泡排序时间复杂度的图如下所示:

Bubble Sort time complexity

正如你所见,当数组大小增加时,运行时间会非常快地增加。

幸运的是,有一些排序算法比它更快,例如 快速排序


冒泡排序模拟

选择数组中的元素数量,然后运行此模拟,以了解冒泡排序处理 \(n\) 个元素的数组所需的操作次数 \(O(n^2)\)。

{{ this.userX }}

操作次数:{{ operations }}

 

上方的红线表示上限时间复杂度 \(O(n^2)\),而此时的实际函数是 \(1.05 \cdot n^2\)。

如果存在一个正常量 \(C\),使得对于大量的 \(n\) 值,\(C \cdot g(n) > f(n)\),则称函数 \(f(n)\) 为 \(O(g(n))\)。

在这种情况下,\(f(n)\) 是冒泡排序使用的操作数,\(g(n)=n^2\),\(C=1.05\)。

此页面上阅读更多关于大 O 符号和时间复杂度的信息。



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持