簡體   English   中英

按順序插入數組

[英]Inserting into array in order

簡單來說,我正在研究的項目的一部分讓我采用一個按順序降序的數組並添加一個元素,以便數組保持有序。 最初我認為將元素添加到數組中然后在實現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錯誤,但我覺得必須有一個比這更簡單的方法,對吧?

一旦找到正確的位置,即if(value <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++;
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來完成復制操作 - 對於小型陣列來說速度較慢,但​​對於大型陣列則更快。

實際上,只有一個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;
    }

一些示例運行如下:

Initail數組是[ 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]

加= 100

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM