通过实现插入排序来改进快速排序

时间:2011-08-17 10:32:07

标签: algorithm sorting quicksort insertion-sort

在输入接近排序时,利用插入排序的快速运行时间,可以在实践中提高快速排序的运行时间。 当在具有少于k个元素的子数组上调用quicksort时,让它只返回而不对子数组进行排序。在对quicksort返回顶级调用之后,对整个数组运行插入排序以完成排序过程。

认为此排序算法在O(nk + n log(n / k))预期时间内运行。在理论上和实践中应该如何挑选k?

1 个答案:

答案 0 :(得分:3)

粗略地说:

快速排序是O(N log(N))

当子列表长度为k时停止,快速排序部分变为O(N log(N/K)),因为您必须去的深度减少了K倍。

插入排序通常为O(n^2),因为您平均每次移动最多n / 2次,并忽略1/2因子。

由于插入排序现在位于固定长度数组上,因此您只能在最多k个位置移动每个元素。这会导致您的操作的插入排序部分为O(NK)

理论上,较大的K值会给出更快的排序,但这取决于排序的项目数量很大。在实践中,k的最佳值将取决于n的值,并且可以通过将k作为常数区分k来找到。

如果德兰建议这是一个家庭作业问题,这个答案可能需要一些充实和正式的证据。