【发布时间】:2013-09-12 12:24:47
【问题描述】:
考虑两个长度为 N 的数组 A 和 B,其中 N 非常小。我想对 A 中的元素进行排序并将排序后的元素存储在 B 中。
在 A 上进行就地插入排序,然后将排序后的值批量复制到 B 是相当简单的。但是,这无法利用两件事:
- 有大小为 N 的暂存空间可供使用,并且
- 排序后的值最终需要出现在 B 而不是 A。
谁能提出不同的方法(可能是修改后的插入排序?),以利用其中一种(或两种)并最终胜过插入排序+复制的简单解决方案?
【问题讨论】:
-
插入排序非常低效。您是否有理由使用它而不是快速排序/合并排序/其他一些 O(n log n) sorting algorithm?如果 N 小到足以让使用插入排序成为一个不错的想法(比如 100 或更少),那么任何修改都不会产生重大影响,因为运行时间已经很短了。
-
插入排序实际上适用于较小的 N 值。这就是为什么一旦要排序的区域小于某个阈值,大多数快速排序实现都会退回到插入排序。查看 Bentley 和 Mcilroy 的“Engineering a Sort Function”(1993 年)。这就是我计划使用它的方式:作为更复杂的整体排序的后备。
标签: sorting insertion-sort selection-sort