Sorting 插入排序的替代方法+;必须对小数组进行排序*和*复制时进行复制

Sorting 插入排序的替代方法+;必须对小数组进行排序*和*复制时进行复制,sorting,insertion-sort,selection-sort,Sorting,Insertion Sort,Selection Sort,考虑两个数组,A和B,它们的长度都是N,其中N相当小。我想对A中的元素进行排序,并将排序后的元素存储在B中 对A执行就地插入排序,然后将排序后的值大容量复制到B是相当简单的。但是,这无法利用两个优点: 有大小为N的划痕空间可供使用和 排序后的值最终需要在B中结束,而不是在A中结束 有谁能提出不同的方法(可能是一种改进的插入排序?)来利用其中的一种(或两种)并最终超越插入排序+复制的简单解决方案吗?许多年后就会出现,但如果有人有机会,这是我的两分钱。 将插入排序与快速不合适排序(如合并排序)结合使

考虑两个数组,A和B,它们的长度都是N,其中N相当小。我想对A中的元素进行排序,并将排序后的元素存储在B中

对A执行就地插入排序,然后将排序后的值大容量复制到B是相当简单的。但是,这无法利用两个优点:

  • 有大小为N的划痕空间可供使用和
  • 排序后的值最终需要在B中结束,而不是在A中结束

  • 有谁能提出不同的方法(可能是一种改进的插入排序?)来利用其中的一种(或两种)并最终超越插入排序+复制的简单解决方案吗?

    许多年后就会出现,但如果有人有机会,这是我的两分钱。 将插入排序与快速不合适排序(如合并排序)结合使用可能会提供一些最小的改进

  • 将数组拆分为四分之一,然后使用插入排序进行排序
  • 将第一节和第二节合并到临时空间,第三节和第四节相同
  • 将上半部分和下半部分从零开始合并到目标阵列中

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

    插入排序效率非常低。您使用它而不是快速排序/合并排序/其他O(n log n)有什么原因吗?如果N足够小,可以使用插入排序(比如100或更少),任何修改都不会产生显著差异,因为运行时间已经很短了。插入排序实际上适用于较小的N值。这就是为什么大多数快速排序实现在要排序的区域小于某个阈值时会退回到插入排序。查看Bentley和Mcilroy的“工程排序功能”(1993)。这就是我计划使用它的方式:作为一种内置于更复杂的总体排序中的后备方法。