将数字插入随机数组

时间:2015-02-11 01:17:18

标签: java arrays

我需要一些帮助将数字8插入到一个给我随机值的数组中。数组必须按顺序排列。例如,如果我有一个数组(1,5,10,15),我必须在5和10之间插入数字8。我有一个问题,我怎么能找到一个方法来找到8将放置因为数组是随机的,它可以是任何东西。到目前为止,这是我的代码:

public class TrickyInsert {

public static void main(String[] args) {

    int[] mysteryArr = generateRandArr();

    //print out starting state of mysteryArr:
    System.out.print("start:\t");
    for ( int a : mysteryArr ) {
        System.out.print( a + ", ");
    }
    System.out.println();


    //code starts below

    // insert value '8' in the appropriate place in mysteryArr[]
    int[] tmp = new int[mysteryArr.length + 1];
    int b = mysteryArr.length;
    for(int i = 0; i < mysteryArr.length; i++) {
        tmp[i] = mysteryArr[i];

    }
    tmp[b] = 8;
    for(int i =b ; i<mysteryArr.length; i++) {
        tmp[i+1] = mysteryArr[i];
    }
    mysteryArr = tmp;

任何提示?谢谢!

5 个答案:

答案 0 :(得分:5)

只需添加号码,然后使用Arrays.sort方法,

int b = mysteryArr.length;
int[] tmp = new int[b + 1];    
for(int i = 0; i < b; i++) {
    tmp[i] = mysteryArr[i];
}
tmp[b] = 8;
mysteryArr = Arrays.sort(tmp);

答案 1 :(得分:1)

在您的示例中,随机数组已排序。如果是这种情况,只需插入8并再次排序。

答案 2 :(得分:1)

只需复制数组,添加8,然后再次排序。

        int[] a = generateRandArr();

        int[] b = Arrays.copyOf(a, a.length + 1);

        b[a.length] = 8;

        Arrays.sort(b);

答案 3 :(得分:0)

我建议使用二进制搜索来找到合适的索引。找到索引后,您可以使用

System.arraycopy(Object src, int srcIndex, Obj dest, int destIndex, int length)

将左半部分复制到新数组(长度比现有数组长一个),然后是新元素,最后是右半部分。这将停止每次插入元素时对整个数组进行排序的需要。

此外,以下部分不做任何事情。

for(int i =b ; i<mysteryArr.length; i++) {
    tmp[i+1] = mysteryArr[i];
}

int b = mysteryArr.length;以来,在设置int i =b ;后,i<mysteryArr.length;将为false,因此此for循环中的行将永远不会执行。

答案 4 :(得分:0)

int findPosition(int a, int[] inputArr)
 {
  for(int i = 0; i < inputArr.length; ++i)
   if(inputArr[i] < a)
    return i;
   return -1;
 }

int[] tmpArr = new int[mysteryArr.length + 1];
int a = 8;   // or any other number
int x = findPosition(a, mysteryArr);
if(x == -1)
 int i = 0;
 for(; i < mysteryArr.length; ++i)
   tmpArr[i] = mysteryArr[i];
 tmpArr[i] = a;
else
 for(int i = 0; i < mysteryArr.length + 1; ++i)
  if(i <  x)
   tmpArr[i] = mysteryArr[i];
  else if(i == x)
   tmpArr = a;
  else
   tmpArr[i] = mysteryArr[i - 1];