正如标题所问,为什么插入,泡沫和选择排序有相同的大 - ?在我的算法类中,我们已经介绍了上述四种算法并合并排序,为什么还要使用上述算法中的任何一种来代替合并排序?为什么Bubble,Insertion和Selection排序有相同的Big-O?
回答
虽然它们是不同的算法,但它们具有相同的渐近复杂性,因为在某个级别上,每个算法都会在长度为n的列表中进行两次通过。关键是Big-O是一种最糟糕的绩效衡量标准。插入排序在最坏的情况下是O(n^2),但是在最好的情况下,当列表已经排序时,它变成O(n)。不同的排序算法具有不同的优势,需要分析超越大的复杂性。这就是说,你几乎总是使用nlog(n)排序更好,而像泡泡排序这样的主要功能可能会将人们引入排序算法的概念。
尽管一些排序算法如冒泡排序对于大量项目来说非常缓慢,但当您只有少量项目时它们非常快,部分原因是它们非常简单。当物品已经接近正确位置时,泡泡分类或插入排序也可能很有用。通常情况下,一个好的排序算法将使用一种技术来获取按课程级别排序的项目,然后使用另一种算法来进行精细排序。
这是在这里被问到的一个更常见的问题。 Big-O符号是衡量算法理论界限的一种方法,这就是在最佳情况下使事物保持恒定时间O(1)的一种方法,即使这种情况很少发生,因此也是最好的情况。这三种算法具有相同的大O的原因是它们都以相同的方式攻击排序问题,具有相同的大O并不意味着这些算法在工作方式上是远程等价的,即使过程是相似的。从纯粹的学术角度来看,这些教授的理由是,你可以从历史中学习,而不是认为你会冒泡沫排序来“震惊世界”。它也被用来表明看起来像一个简单的概念,即排序,可以证明远比“天真”的方法会产生更复杂。
措辞非常好,谢谢。 – user123
- 1. 为什么在实践中插入排序比Bubble Sort和堆排序更快?
- 2. Pascal Bubble排序
- 3. Java - 为什么我的Bubble排序比我的插入排序更快?
- 4. 为什么Javascript的Bubble排序比其他排序算法快得多?
- 5. 如何结合OddArr和Bubble排序
- 6. Java Bubble排序迭代只有两次
- 7. Bubble排序和快速排序的运行时间比较
- 8. C++ Insertion排序一个向量
- 9. Bubble排序错误输出
- 10. Calculate Big Theta Notation Bubble排序
- 11. 为什么原地排序的相同文件失败?
- 12. 什么是算法的bigO与每个添加的n相加?
- 13. 使用BigO符号排序forward_lists?
- 14. 线性回归的BigO是什么?
- 15. 为什么他们有相同的ID?
- 16. 为什么排序不同于串
- 17. 为什么我的TStringList没有排序?
- 18. 为什么我的DataGrid没有排序?
- 19. Bubble排序Java中的空Ptr异常
- 20. Bubble排序数组中的字符串
- 21. 如果有尾字段,为什么排序命令的排序方式不同?
- 22. 为什么气泡排序和插入排序的性能相同,即O(n^2)
- 23. 为什么我的Bubble Sort排序数据的速度比随机数据或具有多个相同值的数据快得多?
- 24. 为什么这个算法的bigO m^2 * n?
- 25. 如何使用Bubble排序对我的JTable进行排序?
- 26. 订购和排序有什么区别?
- 27. 为什么Transition.captureStartValues和Transition.captureEndValues具有相同属性的View?
- 28. 为什么TextAppearance和TextAppearance.Small具有相同的文本大小?
- 29. Java - 为什么System和Runtime类具有相同的方法?
- 30. 为什么允许CountableRange具有相同的lowerBound和upperBound?
我不确定你在这个问题上得到什么。你是否想知道这些算法有什么共同之处,使它们都具有相同的复杂性,或者你想知道为什么复杂性不是别的? –
你在这里问两个不同的问题1)为什么是泡沫,插入和选择O(n^2)和2)什么是他们的有效用例?经过独立研究后,请将这些分开。投票结束的过于宽泛。 – djechlin