2

我目前正在努力编写一个循环,该循环从 an 中的某个点开始Array并将其向下推到正确的一个位置,以便可以在现有值所在的位置放置一个新值,即插入排序。

到目前为止,我有一个循环可以找到值所在的位置:

int hold=0;
 for (int j = 0; j < nElements; j++)   
 {
    int temp = list[j];
    if (temp <= value)
    {
       hold = j;  
    }

 }

我现在正在写 for 循环来改变一切。我有:

for (int j = hold; j >= numElements; j--)
 {
     int temp = list[j];
     list[j] = value;

     list[j+1] = temp;

    }

nElements 是我存储在数组中的当前整数的数量。

所有这一切只是在我调用将整数添加到数组的方法时在点 0 中插入第一个数字。当再次调用该方法时,根本不会添加该数字。

我也不能使用预定义的方法,例如System.arraycopy(). 我需要对循环进行编码。

4

1 回答 1

0

你应该使用System.arrayCopy().

实际上,您并没有复制任何内容,因为您是从 while 开始hold并循环,而j >= nElements这永远不会发生。

为了腾出空间,你需要使用类似的东西:

System.arrayCopy(list, hold, list, hold+1, nElements - hold - 1);

现在添加我们发现我们不能使用系统调用:

或者,如果arrayCopy不允许,您将需要一个循环,例如:

for ( int i = nElements - 1; i > hold; i-- ) {
  list[i] = list[i-1];
}

请注意,此代码故意未经测试,因为此问题可能是家庭作业。

于 2013-02-14T00:27:40.480 回答