我应该改变什么来使这项工作

时间:2014-05-25 00:51:01

标签: java sorting insertion-sort

public static void insertionSort(int[] a) {
  if (a == null || a.length < 2)
    return;
  int j;
  for (int i = 1, temp = a[i]; i < a.length; i++) {
    for (j = i - 1; j >= 0 && temp < a[j]; a[j + 1] = a[j], j--);
    a[j + 1] = temp;
  }
}

期望按升序对int数组进行排序。但对于输入数组{ 1, 2 ,3 , 7 , 8 , 6 , 100 , 99 , 98},它会提供输出[1, 2, 2, 2, 2, 2, 2, 2, 2]

为什么此插入排序代码无法按预期工作?

1 个答案:

答案 0 :(得分:3)

通过将temp = a[i]放在外部循环的初始化子句中,可以确保它只运行一次。在您提供的示例中,temp将被分配2,您永远不会将其更改为其他任何内容。

然后在循环的其余部分,只要有更大的条目,就会最终将temp的值分配给数组中的其他条目。因此大多数数组最终都设置为2。

所以temp = a[i]需要在外部循环的主体中,而不是在其初始化子句中。