插入排序和冒泡排序与选择排序的效率?

时间:2012-10-14 23:44:36

标签: sorting selection bubble-sort insertion-sort

我已经写下插入排序比选择排序更快,这比冒泡排序快,并且它们的所有3的运行时间都是O(n ^ 2),但是我可以说它们彼此进行比较?

3 个答案:

答案 0 :(得分:7)

您可以根据以下标准对排序算法进行比较:

  1. 时间复杂度(Big-O表示法)。您应该注意,最佳情况,最坏情况和平均运行时间可能具有不同的时间复杂度。例如,冒泡排序的最佳情况仅为O(n),当原始列表大部分按顺序排列时(不是很多元素不合适),它比选择排序更快。
  2. 记忆复杂性。当n增长时,对列表进行排序需要多少内存?
  3. 稳定性。排序是否保留具有等效排序值的元素的相对排序? (例如,如果您按价格对目录项目列表进行排序,则某些元素可能具有相同的价格。如果目录最初按项目名称按字母顺序排序,则所选排序算法将保留每组等价格中的字母排序的项目)。
  4. Best / Worst / Averavge所需的比较次数。比较操作昂贵时很重要。 (例如:比较通过某些模拟或其他复杂计算计算效率的替代设计的效率)。
  5. 最佳/最差/需要的平均交换操作数。交换操作很昂贵时很重要。 (例如:分拣必须在船甲板上物理移动的集装箱)
  6. 代码大小。冒泡排序以其较小的代码占用而闻名。

答案 1 :(得分:1)

有几种方法可以看到插入/选择/冒泡排序都在n ^ 2时间内运行。

  • 他们使用嵌套循环:n个外循环,每个循环平均具有n / 2个内循环
  • 他们比较所有元素对:有n *(n-1)/ 2对

以下是insertion/selection/bubble sort运行的详细分析。

答案 2 :(得分:0)

Bubblesort的优点在于可以检测已排序的列表:

BubbleSort最佳情况:O(n)

但是,即使在这种情况下,插入排序也具有更好/相同的性能。

Bubblesort或多或少只适合于理解和/或教授排序算法的机制,但由于其复杂性,这些天在编程中找不到合适的用途

O(n²)

表示,在包含少量元素的列表上,其效率急剧下降。