Слияние двух несортированных массивов в один сортированный
Дано два массива:
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++];, поэтому явно прописал увеличение индексов.