我对测试有疑问 - 我弄错了,但我不知道为什么?
问题:使用插入排序将整数数组从最大到最小排序。假设数组最初包含以下元素:
5 9 17 12 2 14
第三次通过for循环后它会是什么样子?
17 9 5 12 2 14
17 12 9 5 2 14 - 正确答案
17 12 9 5 14 2
17 14 12 9 5 2
9 5 17 12 2 14
在插入排序中,我认为源数组未受影响;我觉得,在第三次通过时,目标阵列将是不完整的。
测试是如何得出这个答案的?
答案 0 :(得分:2)
基本上,在n
次插入排序后,第一个n+1
元素按正确顺序排序,其余元素不受影响。正如您在替代方案中所看到的,正确的答案是唯一能够实现这一目标的答案。每一步只是相对于已经排序的数字插入,所以每一步都要正确排序一个额外的数字。
步骤0(原始,5
假设已排序)
5 9 17 12 2 14
步骤1,取9并将其放在5之前的正确位置(结果,9 5
已排序)
9 5 17 12 2 14
第2步,取17并将其放在9之前的正确位置(结果17 9 5
排序)
17 9 5 12 2 14
步骤3,取12并将其放在17之后和9之前的正确位置(结果17 12 9 5
排序)
17 12 9 5 2 14
答案 1 :(得分:1)
插入排序通常是就地完成的。在k
次迭代后,第一个k + 1
元素被排序,因此您已经在上面显示了答案。