Добрый день. Сейчас изучаю алгоритмы сортировки и дошел до сортировки слиянием. Написал ее алгоритм в 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
Удачи в обучении!