【问题标题】:alternative to insertion sort + copy when small array must be sorted *and* copied当必须对小数组进行排序*和*复制时,替代插入排序+复制
【发布时间】:2013-09-12 12:24:47
【问题描述】:

考虑两个长度为 N 的数组 A 和 B,其中 N 非常小。我想对 A 中的元素进行排序并将排序后的元素存储在 B 中。

在 A 上进行就地插入排序,然后将排序后的值批量复制到 B 是相当简单的。但是,这无法利用两件事:

  1. 有大小为 N 的暂存空间可供使用,并且
  2. 排序后的值最终需要出现在 B 而不是 A。

谁能提出不同的方法(可能是修改后的插入排序?),以利用其中一种(或两种)并最终胜过插入排序+复制的简单解决方案?

【问题讨论】:

  • 插入排序非常低效。您是否有理由使用它而不是快速排序/合并排序/其他一些 O(n log n) sorting algorithm?如果 N 小到足以让使用插入排序成为一个不错的想法(比如 100 或更少),那么任何修改都不会产生重大影响,因为运行时间已经很短了。
  • 插入排序实际上适用于较小的 N 值。这就是为什么一旦要排序的区域小于某个阈值,大多数快速排序实现都会退回到插入排序。查看 Bentley 和 Mcilroy 的“Engineering a Sort Function”(1993 年)。这就是我计划使用它的方式:作为更复杂的整体排序的后备。

标签: sorting insertion-sort selection-sort


【解决方案1】:

多年后才出现,但如果其他人有机会,这是我的两分钱。 将插入排序与合并排序等快速异地排序结合使用可能会提供一些最小的改进。

  1. 将数组分成四等份并使用插入排序进行排序
  2. 将第一和第二季度合并到暂存空间,第三和第四季度相同
  3. 从头开始将前半部分和后半部分合并到目标数组中

同样,这可能提供最小的现实世界改进,并且可能是过早优化的情况。你最好对你的应用程序进行基准测试,看看你是否真的需要改进这部分算法,或者你的时间是否最好花在优化其他方面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-20
    • 2022-01-17
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2020-05-18
    • 2019-07-15
    相关资源
    最近更新 更多