Как правильно реализовать сортировку массива слиянием в Java с помощью моего решения?

#java #algorithm #sorting #merge #array-merge

#java #алгоритм #сортировка #слияние #массив-слияние

Вопрос:

Это решение отлично подходит для меня, но у меня есть вопрос. Когда я отлаживал свою программу, я заметил, что, например, для этого ввода (когда я тестирую правильную работу программы) -> int[] arr = {1,3}; int[] arr1 = {2,4}; Я вижу, что мой индекс первого массива по какой-то причине увеличивается, и мой отладчик показывает, что на том же этапе массив находится вне диапазона. Программа работает и с этим, но я хотел бы знать, как теоретически это можно исправить или это не имеет смысла, и все работает правильно? Я также пробовал различные проверки If (), но ничего не устранило проблему. Надеюсь, я донес до вас суть проблемы.

 public static int[] mergeArr(int[] arr1, int[] arr2) {
         int[] result = new int[arr1.length   arr2.length];
          int i = 0;
    int j = 0;
    int k = 0;
    while (i < arr1.length amp;amp; j < arr2.length) {
           if (arr1[i] < arr2[j]) {
                result[k  ] = arr1[i];
                i  ;
            } else {
                result[k  ] = arr2[j];
                j  ;
            }
                System.arraycopy(arr1, i, result, k, arr1.length - i);
                System.arraycopy(arr2, j, result, k, arr2.length - j);
    }
        return resu<
    }
}


  
 

Комментарии:

1. Ваша программа проигнорирует первый маленький элемент, например, с двумя массивами, которые вы привели выше, 1 не будет в результирующем массиве.

2. Почему ты звонишь System.arraycopy() ? Попробуйте удалить эти 2 строки. Также измените свой цикл на for (int k = 0; k < result.length; k )

3. @Bohemian это только усугубило мою ситуацию, и теперь я действительно получаю сообщение об ошибке, мне кажется, что решение этой проблемы с помощью цикла for — не очень хорошая идея.

4. @Bohemian Если мы говорим о System.arraycopy, я использую его для записи так называемого оставшегося «хвоста» в памяти. Без этого метода я не смогу правильно получить желаемый результат, а поскольку при сравнении последних индексов я не буду использовать копирование массива, я просто получу 0 в последней позиции массива.