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\) 次交换。

我们可以开始计算选择排序算法的操作次数

\[ \begin{equation} \begin{aligned} Operations {} & = (n-1)\cdot \frac{n}{2} + n \\ & = \frac{n^2}{2} - \frac{n}{2} + n \\ & = \frac{n^2}{2} + \frac{n}{2} \end{aligned} \end{equation} \]

在查看算法的运行时间时,我们着眼于非常大的数据集,这意味着 \(n\) 是一个非常大的数字。对于一个非常大的数字 \(n\),\(\frac{n^2}{2}\) 项会比 \(\frac{n}{2}\) 项大得多,我们可以通过简单地删除第二个项 \(\frac{n}{2}\) 来近似估计。

\[Operations = \frac{n^2}{2} + \frac{n}{2} \approx \frac{n^2}{2} = \frac{1}{2} \cdot n^2 \]

使用大 O 符号来描述选择排序算法的时间复杂度,我们得到

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

选择排序算法的时间复杂度可以用这样的图表来表示

Selection Sort time complexity

正如你所看到的,运行时间与冒泡排序相同:当数组的大小增加时,运行时间会迅速增加。


选择排序模拟

运行模拟,查看数组中不同数量的值,并查看选择排序在一个包含 \(n\) 个元素的数组上需要的操作次数是 \(O(n^2)\)

{{ this.userX }}

操作次数: {{ operations }}

 

在这个模拟中,我们可以注意到与冒泡排序最显著的不同是,选择排序的最佳情况和最坏情况实际上几乎相同(\(O(n^2)\)),但对于冒泡排序,最佳情况的运行时间只有 \(O(n)\)。

选择排序的最佳情况和最坏情况之间的差异主要是交换次数。在最佳情况下,选择排序不需要交换任何值,因为数组已经排序。在最坏情况下,数组已经排序,但顺序错误,因此选择排序必须执行与数组中的值一样多的交换。



×

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.