选择排序比插入大数组要快吗?

时间:2012-12-02 19:27:47

标签: algorithm sorting insertion-sort

  

可能重复:
  Efficency of Insertion Sort vs Bubble sort vs Selection sort?

选择排序比插入大数组要快吗?当它在最恶劣的情况下?

我知道插入比选择更快,但对于大型阵列和最恶劣的情况?

3 个答案:

答案 0 :(得分:4)

所涉及阵列的大小很少会产生太大影响。

真正的问题是比较与复制的速度。选择排序将获胜的时间是比较批次比复制更快的时间。例如,让我们假设两个字段:一个int作为键,另一个兆字节数据附加到它。

在这种情况下,比较只涉及单个int,所以它真的很快,但复制涉及整个兆字节,所以它几乎肯定会慢一些。

由于选择排序做了很多比较,但副本相对较少,这种情况会有利于它。插入排序可以执行更多的副本,因此在这种情况下,较慢的副本会使其慢下来。

对于选择排序的最坏情况,它几乎是相反的 - 复制速度快但比较慢的任何东西。

答案 1 :(得分:1)

根据Wikipedia article

  

通常,插入排序会写入数组O(n2)次,   而选择排序只会写O(n)次。为此原因   在写入存储器的情况下,选择排序可能是优选的   显着地比读取更昂贵,例如使用EEPROM或   闪存。

无论阵列大小如何,这都是正确的。事实上,随着阵列变大,差异会更明显。

答案 2 :(得分:0)

插入排序,如果实施得当,请使用memcpy()移动其他值。所以它取决于处理器,缓存速度(第一级第二级chache),缓存大小,当一个算法变得比另一个快时更快。

我记得一个实现(是java吗?),当元素数量没有超过特定的硬编码阈值时使用了一个算法,否则使用了另一个算法。

所以,你只需要测量它。 大O符号对于中小型阵列有点误导,然后O(N)表示c * O(N)。 因子c影响总执行时间。