按顺序插入数组

时间:2013-12-03 02:38:10

标签: java arrays insertion

简单来说,我正在处理的项目的一部分让我采用一个按顺序降序的数组并添加一个元素,以便数组保持有序。最初我认为将元素添加到数组中然后在实现Comparable后进行排序会很简单,但后来发现任何类型的排序算法都是禁止的;收藏也是如此。有什么想法如何从这里开始,任何提示?

EX:

int[] x = [ 7, 6, 6, 5, 3, 2, 1 ] 

add 4

[ 7, 6, 6, 5, 4, 3, 2, 1 ]

澄清说我并非完全没有想法,只是有效的想法。到目前为止我能够解释的是:

int[] bigger = new int[x.length];
int add = 4;
for (int i = 0; i < bigger.length; i++){
     if ( add > x[i] && add < x[i+1]){
         bigger[i] = x[i];
         bigger[i+1] = add;
     else{
         bigger[i] = x[i];
     }
}

我知道它会为x抛出一个IndexOutOfBounds错误,但我觉得必须有一个比这更简单的方法,对吗?

3 个答案:

答案 0 :(得分:2)

一旦找到正确的位置,即if(value&lt; list [i]){为true,则将所有可用元素移至右侧。您只使用list [i + 1] = list [i];

移动一个
   list[numElements] = value;
    for(int i = 0; i < numElements; i++){
        //May be I should use a nested loop?
        //for(k = 0; k <)
         if(value < list[i]){
             for(int j= numElements-1; j>=i; j--){
                  list[j+1]= list[j];
              }
              list[i] = value;
              break;
        }
    }
    numElements++;

答案 1 :(得分:1)

int add = 4;

int[] newArray = new int[oldArray.length + 1];

int oldPos = 0;
int newPos = 1;
while (oldPos < oldArray.length) {
    if (add > oldArray[oldPos]) {
        break;
    }
    newArray[newPos] = oldArray[oldPos];
    oldPos++;
    newPos++;
}

newArray[newPos] = add;
newPos++;

while (oldPos < oldArray.length) {
    newArray[newPos] = oldArray[oldPos];
    oldPos++;
    newPos++;
}

或者可以使用System.arraycopy来完成复制操作 - 对于小型数组来说速度较慢,但​​对于大型数组则更快。

答案 2 :(得分:1)

实际上,只有一个for循环可以实现你的功能。

    int[] x = {7, 6, 6, 5, 3, 2, 1 };
    //Declare an int array with length = x.length+1;
    int[] bigger = new int[x.length+1];
    int add = 4;
    /** Define a variable to indicate that if a property location is found.*/
    boolean found = false;
    /** Define a variable to store an index for insert*/
    int indexToInsert = 0;
    for (int i = 0; i < x.length; i++){
         if ( !found && add >= x[i]){
             found = true;
             indexToInsert = i;
             bigger[indexToInsert] = add;
             i--;
         }
         else{
             if(found)
             {
                 bigger[i+1] = x[i]; 
             }else
             {
                 bigger[i] = x[i];
             }

         }
    }

    /*
     * If a property index is not found. Then put the value at last. 
     */
    if(!found)
    {
        indexToInsert = x.length;//
        bigger[indexToInsert] = add;
    }

一些示例运行如下:

初始化数组 [7,6,6,5,3,2,1]

add = 4

 [7, 6, 6, 5, 4, 3, 2, 1]

add = -1

 [7, 6, 6, 5, 3, 2, 1, -1]

add = 100

 [100, 7, 6, 6, 5, 3, 2, 1]