Слияние двух несортированных массивов в один сортированный

Дано два массива:

int[] array1 = {1, 5, 16, 9, 3, 8, 13, 19, 7};
int[] array2 = {12, 4, 11, 18, 10, 2, 16, 7, 11};

Нужно написать программу, которая с помощью сортировки слиянием соединит эти два массива в один отсортированный (по возрастанию чисел).


Ответы (2 шт):

Автор решения: Aziz Umarov

Так думаю можно получить ответ.

 public static void main(String[] args) {

    int[] array1 = {1, 5, 16, 9, 3, 8, 13, 19, 7};
    int[] array2 = {12, 4, 11, 18, 10, 2, 16, 7, 11};

    int[] result =
        IntStream.concat(Arrays.stream(array1), Arrays.stream(array2)).sorted().toArray();

    Arrays.stream(result).forEach(System.out::println);
  }
→ Ссылка
Автор решения: avp

Алгоритм в виде кода на Си (считайте, что для Java это псевдокод)

void merge (int array1[], int length1, int array2[], int length2, int result[]) {
   int i1 = 0, i2 = 0, ir = 0;

   while (i1 < length1 && i2 < length2) {
     if (array1[i1] <= array2[i2]) {
        result[ir] = array1[i1];
        i1 = i1 + 1;
     } else {
        resuly[ir] = array2[i2];
        i2 = i2 + 1;
     }
     ir = ir + 1;
   }

   // далее выполнится только один из этих циклов
   while (i1 < length1) {
      result[ir] = array1[i1];
      i1 = i1 + 1;
      ir = ir + 1;
   }
   while (i2 < length2) {
      result[ir] = array2[i2];
      i2 = i2 + 1;
      ir = ir + 1;
   }
}

Не помню, можно ли в Java писать так -- arr1[i++] = arr2[j++];, поэтому явно прописал увеличение индексов.

→ Ссылка