Может ли кто-нибудь сказать, в чем проблема в логике слияния? Если элемент правого массива меньше элемента в левом массиве, то он работает. Другой мудрый дает неправильный ответ. Я правильно разделил массив. Я даю свою логику слияния здесь.MergeSort. Ошибка в логике слияния
public static void main(String[] args) {
int[] list = { 32,14, 67, 76, 23, 41, 58, 85};
System.out.println("before: " + Arrays.toString(list));
mergeSort(list);
System.out.println("after: " + Arrays.toString(list));
}
public static void mergeSort(int[] array) {
if (array.length > 1) {
// split array into two halves
int[] left = leftHalf(array);
int[] right = rightHalf(array);
mergeSort(left);
mergeSort(right);
merge(array, left, right);
}
}
public static void merge(int[] result,
int[] left, int[] right) {
int i1 = 0; // index into left array
int i2 = 0; // index into right array
int j = 0;
int k = 0;
for (int i=0; i1 < left.length && i2 < right.length;i++) {
if (left[i1] < right[i2]) {
result[i] = left[i1];
// take from left
i1++;
} else {
result[i] = right[i2];
// take from right
i2++;
}
}
}
После цикла for, вы забыли скопировать оставшуюся часть одного подмассива назад, чтобы результат, когда другой подмассива достигает конца? – waltersu
Дублирование http://stackoverflow.com/questions/5958169/how-to-merge-two-sorted-arrays-into-a-sorted-array –