【发布时间】:2014-10-21 16:55:44
【问题描述】:
根据here
使用插入排序...用于小数组的调用(即 长度小于通过实验确定的阈值 k)。这 可以通过在小于 k 时简单地停止递归来实现 元素被留下,整个数组被 k 排序:每个元素 距离其最终位置最多 k 个位置。然后,一个 单次插入排序通过在 O(k×n) 时间内完成排序。
我不确定我的理解是否正确。一种涉及多次调用插入排序的方法是
quicksort(A, i, k):
if i+threshold < k:
p := partition(A, i, k)
quicksort(A, i, p - 1)
quicksort(A, p + 1, k)
else
insertionsort(A, i, k)
但这会为每个子数组调用insertionsort()。听起来插入排序只能调用一次,但我有点不明白这一点,因为插入排序被调用多少次并不重要,它通常仍然比快速排序慢。
是这样的想法吗?
sort(A)
quicksort(A, 0, A.length-1)
insertionsort(A, 0, A.length-1)
所以基本上在最后调用一次插入排序?你怎么知道它只需要通过一次而不是 O(n) 运行?
【问题讨论】:
标签: algorithm sorting pseudocode