为了使用非递归排序方法,数组大小的理想阈值应该是多少?

What should be the ideal threshold on array size in order to use a non-recursive sorting method?

我最近修改了排序算法。在修改时,我想象一些代码根据数组的大小选择两种可用排序算法中的最佳算法来对数组进行排序。例如,它必须在 insertion sortquicksort 之间进行选择。

众所周知,quicksort 被广泛用于对大型数组进行排序,并且达到了它的平均情况时间,即 O(nlogn),尽管它的最坏情况时间是 O(n^2)。另一方面,insertion sort 不是递归的,因此它在对小型数组进行排序时可能会消耗较少的 CPU 时间。那么,为了从这些算法中选择最有效的算法,上述代码的阈值大小应该是多少?

其他性能因素,例如 "how close" 是其排序排列的给定序列,现在与我无关。

From Princeton University's quicksort page

Cutoff to insertion sort. As with mergesort, it pays to switch to insertion sort for tiny arrays. The optimum value of the cutoff is system-dependent, but any value between 5 and 15 is likely to work well in most situations.

我个人更喜欢 15 的截止大小。但这同样取决于系统,并且在您的情况下可能是也可能不是最好的。