Menu
×
   ❮   
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 符号和时间复杂度,请访问 此页面



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.