2014-01-23 4 views
0

Я хотел поместить два отсортированных массива в один массив в порядке возрастания, но я не делаю то, что я сделал неправильно.объединить два массива в порядке возрастания

он не будет приводить их в порядок, просто объедините два массива вместе.

int [] merged = new int[count1 + count2]; 
int merg1 = 0, merg2 = 0, index = 0; 

while (merg1 < count1 && merg2 < count2) { 
    if (ary1[merg1] <= ary2[merg2]) { 
     merged[index++] = ary1[merg1++]; 
    } 
    else {   
     merged[index++] = ary2[merg2++]; 
    } 

    while (merg1 < count1) { 
     merged[index++] = ary1[merg1++]; 
    } 

    while (merg2 < count2) { 
     merged[index++] = ary2[merg2++]; 
    } 

    for (int i = 0; i < index; i++) { 
     System.out.print(merged[i] + " "); 
    } 

ответ

0

Каковы последние два цикла? Вы можете не нуждаться в них. Кажется, что вы сортируете первые два числа, тогда циклы while копируют первый массив, а затем второй, не сортируя их.

+0

без петель, он будет печатать беспорядочные целые числа :( – user3225344

0

Вы можете поделиться тем, как результаты выглядят следующим образом?

arry1 = [1,2,6,7] 
arry2 = [2,3,4,8] 

Я согласен с Paradox, без двух дополнительных циклов, вашей логики выше должно быть достаточно. например:

while (merg1 < count1 && merg2 < count2) { 
    if (ary1[merg1] <= ary2[merg2]) { 
     merged[index++] = ary1[merg1++]; 
    } 
    else {   
     merged[index++] = ary2[merg2++]; 
    } 
} 
+0

без петель будет распечатываться «1 2 2 3 4 6 7», он не включает в себя 8 – user3225344

+0

, но я понял это сейчас:) Спасибо хоть – user3225344

0

Не будет ли ошибка исходить от

while (merg1 < count1 && merg2 < count2) { 
... 
} 

Она заканчивается, когда один из номеров выходит за пределы допустимого. После цикла while я добавлю еще один цикл, который добавит остальную часть оставшегося массива в объединенный массив.

0

Вы можете использовать утилиты Array? Например:

int[] array1 = {1,2,6,7}; 
    int[] array2 = {2,3,4,8}; 
    int[] mergedarray = new int[array1.length + array2.length]; 
    System.arraycopy(array1, 0, mergedarray, 0, array1.length); 
    System.arraycopy(array2, 0, mergedarray, array1.length, array2.length); 
    Arrays.sort(mergedarray); 

Это должно дать вам результаты, которые вы ищете.

Смежные вопросы