Quicksort,Heapsort和Bubblesort的相关性

时间:2011-03-31 17:41:43

标签: algorithm sorting

我目前正在注册应用计算专业硕士课程,该课程旨在吸引没有计算背景的人,并为他们提供软件开发和工程方面的速成课程,并为我们在技术行业的职业生涯做好准备。本课程的其中一门课程,高级编程技术,涵盖了许多用C ++实现的排序算法,即Quicksort,Heapsort和Bubblesort。然而,一些本科生告诉我们这些算法与工业无关,并没有被广泛使用。这是真的,如果是的话,我应该看一下什么排序算法?

5 个答案:

答案 0 :(得分:5)

  

Quicksort,Heapsort和Buublesort。然而,一些本科生告诉我们这些算法与行业无关,并没有被广泛使用。

这显然是错误的。你会看到野外的Quicksort甚至可能是heapsort。

  

这是真的,如果是的话,我应该看一下什么排序算法?

学习这些算法的重点是,即使它们不一定在工业中使用,也要理解算法是如何组合在一起的,如何分析它们(最坏的情况是什么,最好的情况是什么,什么是渐近行为等)以及如何证明它们是正确的。

重点是培养如何推理,思考和理解算法的技能,而不是学习你将在工业中看到的算法。

因此,我们使用计算Fibonacci数作为递归算法的一个例子来学习递归的概念,而不是学习如何计算Fibonacci数。这在野外很少需要(除非你正在进行Project Euler问题)。 (无论如何,通过递归实现Fibonacci都很糟糕。)

答案 1 :(得分:3)

  • Bubblesort 表现极差,可能具有教育价值,可以证明这一点。

  • Heapsort 可靠的,理论上(即从复杂性理论的角度来看)快速算法 - 实际上 - 比其他慢具有相同复杂程度的算法,如quicksort。

  • 另一方面,
  • Quicksort 非常快,但对于一些不幸的输入有一个可怕的最坏情况

在实践中,您将实现 ,但使用现有的,高度优化的排序例程(可能就是它们的含义)。

这些将是许多算法的组合,以抵消它们各自的缺陷。您可能会看到Introsort使用quicksort + heapsort来减少最坏情况甚至是小输入的插入排序。

答案 2 :(得分:0)

这些人最有可能的意思是 - 在工作中,我从来没有必要重新实现排序例程,为什么我应该学习已经写过的东西?

我想知道这些对你后来学到的东西有用。它被认为是一般的计算机科学知识和学习任何新算法将帮助您更彻底地学习其他概念。 Quicksort可以教你如何随机算法可以带来更好的解决方案。合并排序有助于学习递归。 Heapsort巧妙地展示了数据结构时间/空间权衡。等等。

如果不出意外,他们很高兴知道采访。

答案 3 :(得分:0)

冒泡排序很慢,O(n ^ 2)。 最常用的是quicksort。平均时间 - O(n log n),但在最坏的情况下为O(n ^ 2)。 合并排序(heapsort)在最坏的情况下工作O(n log n),但它比quicksort更难实现。

答案 4 :(得分:0)

我见过一些Quicksort的实现虽然Bubblesort很少用于教学案例。教别人为什么有些可怕是有用的,这可能是你在这里缺少的一部分,为什么你应该对它有所了解。有些人可能只是去“杜!”为什么Bubblesort很糟糕,可能有些人需要看到更好的证据,说明为什么其他方法更好。排序是一种已被充分研究的问题,而其他一般问题可能没有得到如此充分的研究,例如。看看各种算法来解决旅行商问题等NP完全问题。