Неправильный вывод при объединении отсортированных массивов одинаковой длины

#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. И именно поэтому я воздерживаюсь от использования случайных тестовых примеров, которые приходят мне в голову. Огромное спасибо!