#java #sorting
#java #сортировка
Вопрос:
Я пытаюсь объединить 2 отсортированных массива одинаковой длины. Однако я не получаю желаемый результат. Вот мой код:
public static int[] mergeSorted(int[] arr1, int[] arr2){
int n = arr2.length;
int[] ans = new int[2*n];
int k = 0;
int i = 0;
int j = 0;
while(i < n amp;amp; j < n){
if(arr1[i] <= arr2[j]){
ans[k] = arr1[i];
i ;
}
else{
ans[k] = arr2[j];
j ;
}
k ;
}
while(i < n){
ans[k] = arr1[i];
k ;
i ;
}
while(j < n){
ans[k] = arr2[j];
k ;
j ;
}
return ans;
}
public static void main(String[] args){
int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};
int[] arr2 = new int[]{2, 4, 6, 9, 13, 300};
int[] ans = mergeSorted(arr1, arr2);
for(int el : ans)
System.out.print(el " ");
}
Вывод:
1 2 3 4 5 6 9 13 100 34 29 300
Очевидно, что это неверно. Однако этот код работает для меньших входных данных. Где я ошибаюсь?
РЕДАКТИРОВАТЬ: Тестовые примеры были неправильными, поскольку они не были отсортированы. Код был в порядке.
Комментарии:
1. самый простой подход: добавьте все элементы, затем запустите алгоритм сортировки.
2. Я знаю, что есть другие способы решить эту проблему, но я хочу знать, что я здесь делаю особенно неправильно.
3. Ваш метод сработал бы, если бы ваши два входных массива были отсортированы.
4. В вашем заголовке говорится, что вы хотите объединить два отсортированных массива, и все же ваш первый массив не отсортирован.
5. @NomadMaker Я упоминал об этом в разделе редактирования моего вопроса.
Ответ №1:
Чтобы merge
операция сработала, два объединяемых массива должны быть в отсортированном порядке. Первый массив находится не в отсортированном порядке:
int[] arr1 = new int[]{1, 3, 5, 100, 34, 29};
Измените его на:
int[] arr1 = new int[]{1, 3, 5, 29, 34, 100};
Комментарии:
1. И именно поэтому я воздерживаюсь от использования случайных тестовых примеров, которые приходят мне в голову. Огромное спасибо!