问题描述
我正在尝试做一个插入排序算法,其中有一个pushLeft方法,该方法要求用户提供数组和int索引,并将索引向左推,直到对其进行排序为止。但是,我很难编码。现在我有:
static <E extends Comparable<E>> void pushLeft(double[] testArray,int index) {
for (int i = 1; i < index; i++) {
while (inorder(testArray[i - 1],testArray[index]) == false) {
testArray[i] = testArray[i - 1];
}
testArray[i] = testArray[index];
}
}
现在,如果我有一个double [] testArray = {5,7,8,9,6}并调用pushLeft(testArray,4),它将返回5.0、6.0、6.0、6.0、6.0。我知道这是因为它驻留在for循环中,但是我不确定我还应该怎么做。
谢谢。
解决方法
当您在数组中写一个值时,计算机将不记得原来的值。这里的问题是,您要覆盖左侧的值,然后使用该相同的值来更新左侧的每个值。我已经在下面显示了当前发生的情况。
数组的索引为0,所以当我说索引3时,我指的是第4个元素。
第1步(原始数组): 5.0、7.0、8.0、9.0、6.0
步骤2(用索引4的值覆盖索引3的值): 5.0、7.0、6.0、6.0
第3步(用索引4的值覆盖索引2的值): 5.0、6.0、6.0、6.0
为防止这种情况,请考虑如何保留数组中的值,以免意外复制相同的数字。