Алгоритм - сортирвока методом слияния.

 
 
 
Сообщения:1
Всем привет.
Читал книгу по алгоритмам "Алгоритмы построение и анализ" - и столкнулся с проблемой на алгоритме - сортировка методом слияния.
Написал код, но не могу отловить проблему что я сделал не так.
Вываливает ошибку Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
Может быть кто-нибудь уже пробовал разобраться в данном алгоритме?

Пробовал дебагом отловить в чем ошибка и на строке if (leftArray[i] <= rightArray[j]) { код обваливается на 2 или 3 шаге.

import java.util.Arrays;

class MergeClass {

    void merge(int[] array, int firstIndex, int middleIndex, int lastIndex) {
        int length1 = middleIndex - firstIndex + 1;
        int length2 = lastIndex - middleIndex;

        int[] leftArray = new int[(length1+1)];
        int[] rightArray = new int[(length2+1)];

        for (int i = 0; i < length1; i++) {
            leftArray[i] = array[(firstIndex + i - 1)];
        }
        for (int j = 0; j < length2; j++) {
            rightArray[j] = array[(middleIndex + j)];
        }

        int i = 0;
        int j = 0;

        for (int k = 0; k < lastIndex; k++) {
            if (leftArray[i] <= rightArray[j]) {
                array[k] = leftArray[i];
                i += 1;
            } else {
                array[k] = rightArray[j];
                j += 1;
            }
        }
    }


    int[] sort(int[] array, int fi, int li) {
        if (fi < li) {
            int mid = (fi + li) / 2;
            sort(array, fi, mid);
            sort(array, (mid + 1), li);
            merge(array, fi, mid, li);
        }
        return array;
    }
}

class MergeSort {
    public static void main(String[] args) {
        MergeClass m = new MergeClass();
        int[] a = {5, 4, 2, 4, 1, 7, 8, 4};
        int[] b = m.sort(a, 1, a.length);
        System.out.println(Arrays.toString(b));
    }
}
Изменен:12 дек 2017 12:22
 
 
Сообщения:535
основные исключения следует знать наизусть.
ArrayIndexOutOfBoundsException означает, что ты пытаешься обратиться к ячейке массива за его пределами.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет