我对Java插入排序的逻辑出了什么问题?

时间:2012-04-02 17:39:43

标签: java arrays sorting insertion-sort

我对测试有疑问 - 我弄错了,但我不知道为什么?

问题:使用插入排序将整数数组从最大到最小排序。假设数组最初包含以下元素:

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

在插入排序中,我认为源数组未受影响;我觉得,在第三次通过时,目标阵列将是不完整的。

测试是如何得出这个答案的?

2 个答案:

答案 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元素被排序,因此您已经在上面显示了答案。