【发布时间】:2011-07-19 07:40:30
【问题描述】:
假设我们有一个索引为 0 的序列 S,取 S[0] 并将其插入 S 中下一个值高于 S[0] 且前一个值低于 S[0] 的位置。形式上,S[i] 应该放在 S[i-1]
在列表中这样工作:
Sorting [2, 8, 5, 4, 7, 0, 6, 1, 10, 3, 9]
[2, 8, 5, 4, 7, 0, 6, 1, 10, 3, 9]
[2, 8, 5, 4, 7, 0, 6, 1, 10, 3, 9]
[2, 5, 4, 7, 0, 6, 1, 8, 10, 3, 9]
[2, 4, 5, 7, 0, 6, 1, 8, 10, 3, 9]
[2, 4, 5, 7, 0, 6, 1, 8, 10, 3, 9]
[2, 4, 5, 0, 6, 1, 7, 8, 10, 3, 9]
[0, 2, 4, 5, 6, 1, 7, 8, 10, 3, 9]
[0, 2, 4, 5, 1, 6, 7, 8, 10, 3, 9]
[0, 1, 2, 4, 5, 6, 7, 8, 10, 3, 9]
[0, 1, 2, 4, 5, 6, 7, 8, 3, 9, 10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Got [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
由于每次将元素插入列表时,列表中的 (n-1) 个数字可能会被移动,我们必须执行 n 次,算法应该在 O(n^2) 时间内运行。
我有一个 Python 实现,但不知何故我放错了地方。稍后我会尝试再次编写它,但实现起来有点棘手。有什么想法吗?
Python 实现在这里:http://dpaste.com/hold/522232/。它是由 reddit.com 的 busy_beaver 写的,在这里讨论http://www.reddit.com/r/compsci/comments/ejaaz/is_this_equivalent_to_insertion_sort/
【问题讨论】:
-
如果有多个可能的位置,你会选择哪一个?
-
@aaz 第一个找到。
-
这不是插入排序。 IS 的一个基本特征是,经过 M 次迭代,前 M 个元素是有序的。您对算法的描述提供了这一点,尽管方式非常复杂。