Java Mergesort не работает - PullRequest
       26

Java Mergesort не работает

0 голосов
/ 26 июня 2018

Я написал код для слияния (рекурсивный) в Java.Я попытался отладить его в IntelliJ, но он ничего не сделал

public class Main {

    public static void main(String[] args) {
        int[] ar = {20, 35, -15, 7, 55, 1, -22};
        mergeSort(ar);
        System.out.println(Arrays.toString(ar));
    }

    private static void mergeSort(int[] arra) {
        int l=arra.length;
        int mid = l/2;
        int[] left= Arrays.copyOfRange(arra,0,mid);
        int[] right= Arrays.copyOfRange(arra,mid,l);
        mergeSort(left);
        mergeSort(right);
        merge(left,right,arra);

    }

    public static void merge(int[] ll,int[] rr,int[] array) {
        int nl = ll.length;
        int nr = rr.length;
        int l=0;int r=0;int a=0;
        while(l<=nl && r<= nr) {
            array[a++]=ll[l]<=rr[r] ? ll[l++] : rr[r++];
        }

        if (l<nl) {
            while (l <= nl)
                array[a++] = ll[l++];
        }

        if (r<nr) {
            while (r<=nr)
                array[a++] = rr[r++];
        }
    }

Проблема, похоже, в строке 21, т. Е. "Mergesort (left);"

Также не было красных подчеркиваний накод также, все еще ничего, все же это ни к чему не привело.

1 Ответ

0 голосов
/ 26 июня 2018

В mergeSort () есть бесконечный цикл.Поместите регистр if вокруг кода внутри функции следующим образом:

private static void mergeSort(int[] arra) {
    if (arra.length > 1) {
        int l = arra.length;
        int mid = l / 2;
        int[] left = Arrays.copyOfRange(arra, 0, mid);
        int[] right = Arrays.copyOfRange(arra, mid, l);
        mergeSort(left);
        mergeSort(right);
        merge(left, right, arra);
    }
}

Также в функции merge () замените <= на <в то время как и в таких условиях: </p>

while (l < nl && r < nr) {
    array[a++] = ll[l] <= rr[r] ? ll[l++] : rr[r++];
}

if (l < nl) {
    while (l < nl)
        array[a++] = ll[l++];
}

if (r < nr) {
    while (r < nr)
        array[a++] = rr[r++];
}
...