【问题标题】:Speed of comparison vs copying in array比较速度与在数组中复制
【发布时间】:2018-01-02 19:14:10
【问题描述】:

我一直在比较选择和插入排序。据我所知,插入排序在反转计数上起作用,而取决于它。但在最坏的情况下,总反转计数将是最大的,并且在插入排序中,交换的数量将是最大/大于选择排序,因为在选择排序中,总交换总是输入大小“n”的顺序,并且不超过那个而且会比插入排序小很多。

在最坏的情况下,时间复杂度将取决于比较次数(在选择排序中相等或更少)和交换次数(在插入排序中更多)。 因此,如果交换/写入更快,我可以使用插入排序,但如果与比较相比写入成本更高,那么我将使用选择排序。 那么,在最坏的情况下哪种排序算法会更好,如果我使用数组作为数据结构,如何确定比较速度更快或复制速度更快。

【问题讨论】:

  • 如果你用大 O 表示法询问时间复杂度,那么复制/比较的速度是一个常数,所以应该忽略,你会发现它们都同样复杂 (O(n^2) )。如果您要询问“实际”效率,即在真实计算机上的运行速度方面,那么您需要在要运行这些算法的计算机上对其进行分析。
  • 假设我使用同一台计算机对它们进行排序,那么插入或选择哪个更快?在最坏的情况下相同的输入?
  • 这取决于你运行它们的计算机、你使用的语言、你在编译器中启用的优化、你编写代码的好坏等等。这就是为什么你必须做实际的按照@hnefatl 的建议进行分析。
  • @TusharBhaskar 如有任何疑问。

标签: arrays algorithm performance sorting


【解决方案1】:

插入排序选择排序在最坏情况下的比较次数是相同的O(nxn)。但是要注意的关键是:

选择排序中的比较次数总是 O(nxn) 而:

最佳情况下,插入排序中的比较次数为 O(n) 最好的情况是数据已经排序。

所以,如果比较次数是衡量性能的标准,使用插入排序。

但也应注意:

在最坏的情况下,选择排序中的交换次数为 O(n) 而:

在最坏的情况下,插入排序中的交换次数可以达到 O(nxn)

所以,如果交换次数是衡量性能的标准,选择排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多