Добрый день. Сейчас изучаю алгоритмы сортировки и дошел до сортировки слиянием. Написал ее алгоритм в IDE, но где-то закралась ошибка( Не подскажите в чем проблема? P. S. Вот я наконец разобрался с сортировкой слиянием. Во-первых хочу поблагодарить KIRA за полезные советы и развернутые ответы, а также пользователя vinsler, за его отличную статью по данной теме. Во-вторых, вот код того, что получилось(может понадобится кому):
public class Main {
    public static void main(String[] args) {
        int[] array = {6, 3, 8, 1, 0, -1, -23, 3, 66, 2};
        array = Main.sortArray(array);

        for (int i = 0; i < array.length; i++) { // проверяем, отсортирован ли массив
            System.out.println(array[i]);
        }
    }

    public static int[] sortArray(int[] array) {
        if (array == null)
            return null;

        int length_arr = array.length / 2;

        if (array.length < 2)
            return array;

        if (array.length % 2 != 0) // длина четная?
            length_arr += 1;

            int[] arrayA = new int[length_arr]; // создаем два массива для дальнейшей сортировки
            int[] arrayB = new int[array.length / 2];

            System.arraycopy(array, 0, arrayB, 0, array.length / 2);
            System.arraycopy(array, array.length / 2, arrayA, 0, length_arr);

            arrayA = sortArray(arrayA); // забрасываем их в рекурсию до тех пор, пока их длина не будет равна 1
            arrayB = sortArray(arrayB);

            return mergeSort(arrayA, arrayB);
    }

    public static int[] mergeSort(int[] arrayA, int[] arrayB) {
        int[] arrayC = new int[arrayA.length + arrayB.length];
        int positionA = 0, positionB = 0;

        for (int i = 0; i < arrayA.length + arrayB.length; i++) { // сливаем массивы в один
            if (positionA < arrayA.length && positionB < arrayB.length) {
                if (arrayA[positionA] < arrayB[positionB]) {
                    arrayC[i] = arrayA[positionA];
                    positionA++;
                } else {
                    arrayC[i] = arrayB[positionB];
                    positionB++;
                }

            } else if (positionA == arrayA.length && positionB < arrayB.length) {
                arrayC[i] = arrayB[positionB];
                positionB++;

            } else if (positionA < arrayA.length && positionB == arrayB.length) {
                arrayC[i] = arrayA[positionA];
                positionA++;

            } else {
                arrayC[i] = 0;
            }
        }
        return arrayC;
    }
}
                             // write good code:)
P. S. S. Вот ссылка на профиль одного парня, там он разобрал все основные алгоритмы сортировок: https://github.com/sldstrst/sort_merge Удачи в обучении!