MergeSort Stackoverflow

Kingh_Gilgamesh

Neues Mitglied
Hey Leute,
bin neu im Forum und auch neu im Bereich Programmieren. Ich versuche momentan einen mergeSort Algorithmus zu implementieren. Leider kommt es bei mir zu einem Stackoverflow und ich verstehe leider nicht warum. Laut Eclipse kommt es in Zeile 13 zum overflow. Des weiteren könnte ich einen Tip gebrauchen bezüglich des Ausgebens der restlichen Elemente in der linken und rechten Teilliste nachdem man durch das ganze Array iteriert ist.
Ich bedanke mich im Voraus für eure Hilfe! MergeSort1.PNG MergeSort2.PNG
 

Kingh_Gilgamesh

Neues Mitglied
eh ja da ist wirklich ein fehler sry. aber wenn ich den korrigiere, also wenn ich (left + right)/2 nehme bekomme ich indexoutofbound in zeile 14 und 15. ne idee woran das liegen könnte?
 

Meniskusschaden

Top Contributor
bekomme ich indexoutofbound in zeile 14 und 15.
Das kann nicht sein, denn in den beiden Zeilen erfolgt überhaupt kein indexbasierter Zugriff. Wahrscheinlich wird der Fehler in einer anderen Zeile ausgelöst. Stelle doch mal die komplette Fehlermeldung und dein Programm in Code-Tags hier rein (z.B. über den Button Einfügen->Code->Java). Screenshots sind für Quellcode nicht zweckmäßig.
 
X

Xyz1

Gast
// Eigentliche Arbeit ist merge

Das stimmt. Dennoch ist es ein ziemliches Fummeln mit den Indices. Ich habe das mal halbwegs noch verständlich aufgeschrieben. Was man im Inet findet, ist aber zumindest bei merge etwas anders:
Java:
        for (int j = 0; j <= 12; j++) {
            int[] a = new Random(0).ints(j, 0, 2).toArray();
            div(a, 0, a.length - 1);
            System.out.println(Arrays.toString(a));
        }

        for (int j = 0; j <= 12; j++) {
            int[] a = new Random(0).ints(j, 0, 20).toArray();
            div(a, 0, a.length - 1);
            System.out.println(Arrays.toString(a));
        }
    }

    static void div(int[] a, int l, int r) {
        int m = (r - l) / 2 + l + 1;
        if (l + 1 < r) {
            div(a, l, m - 1);
            div(a, m, r);
        }
        con(a, l, m, r);
    }

    static void con(int[] a, int l, int m, int r) {
        int len = r - l + 1;
        int[] b = new int[len];
        int ll = l;
        int mm = m;
        for (int j = 0; j < len; j++) {
            if (ll == m || mm <= r && a[ll] > a[mm]) {
                b[j] = a[mm];
                mm++;
            } else {
                b[j] = a[ll];
                ll++;
            }
        }
        for (int j = 0; j < len; j++) {
            a[l + j] = b[j];
        }
    }

Code:
[]
[1]
[1, 1]
[0, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1, 1]
[0, 0, 1, 1, 1, 1]
[0, 0, 1, 1, 1, 1, 1]
[0, 0, 0, 1, 1, 1, 1, 1]
[0, 0, 0, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]
[]
[0]
[0, 8]
[0, 8, 9]
[0, 7, 8, 9]
[0, 7, 8, 9, 15]
[0, 7, 8, 9, 13, 15]
[0, 7, 8, 9, 11, 13, 15]
[0, 1, 7, 8, 9, 11, 13, 15]
[0, 1, 7, 8, 9, 11, 13, 15, 19]
[0, 1, 7, 8, 9, 11, 13, 14, 15, 19]
[0, 1, 7, 8, 9, 11, 13, 14, 15, 17, 19]
[0, 1, 7, 8, 9, 11, 13, 14, 15, 17, 17, 19]

Viel Fun damit...

ll steht für Links temporär,
mm steht für Rechts temporär,
j ist eine Laufvariable (i hatte ich schon woanders),
div steht für divide,
con steht für conquer,
der Rest erklärt sich.......
 
X

Xyz1

Gast
Mir ist noch eingefallen, statt "ganz oft" int[] b = new int[len]; könnte man auch einmal ein großes Array definieren. Das müsste dann aber außerhalb der Methode, ginge nicht innerhalb der Methode. Und wie man es dreht es bleibt beim Speicherverhalten von (2*n), d. h.: ebenfalls IN-PLACE! AUßERDEM ist euch sicher aufgefallen: a[ll] > a[mm], d. h.: STABIL (wenn es z. B. Objekte sind).

In Java ist es sicherlich so ähnlich geschrieben. Wenn ich Zeit habe, kann ich da nachgucken, wenn gewollt. :confused:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Mergesort (aber anders) Java Basics - Anfänger-Themen 2
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
H Mergesort aufwand berechen Java Basics - Anfänger-Themen 5
I MergeSort iterativ mit Stacks Java Basics - Anfänger-Themen 13
L Methoden Mergesort methode Java Basics - Anfänger-Themen 4
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
A Rekursion (anhand von Mergesort) nachvollziehen Java Basics - Anfänger-Themen 4
M Erklärung Code Mergesort Bitte Java Basics - Anfänger-Themen 3
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Mergesort Probleme Java Basics - Anfänger-Themen 4
I Mergesort mit ArrayList Java Basics - Anfänger-Themen 4
C Mergesort Java Basics - Anfänger-Themen 4
H MergeSort (für Anfänger ) Java Basics - Anfänger-Themen 9
N MergeSort Java Basics - Anfänger-Themen 8
M MergeSort - Zahlen verschwinden Java Basics - Anfänger-Themen 2
P MergeSort mit Liste Java Basics - Anfänger-Themen 4
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
B Methoden Natural Mergesort Java Basics - Anfänger-Themen 2
P Mergesort || 2 SetLists mischen Java Basics - Anfänger-Themen 2
P Mergesort (zyklische Liste) Java Basics - Anfänger-Themen 2
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
N MergeSort mit Liste Java Basics - Anfänger-Themen 8
P Probleme bei codierung von MergeSort Java Basics - Anfänger-Themen 4
M MergeSort - Threads in Anwendung bremsen alles! Java Basics - Anfänger-Themen 4
Houly Mergesort Java Basics - Anfänger-Themen 4
M Mergesort Java Basics - Anfänger-Themen 11
C MergeSort Problem Java Basics - Anfänger-Themen 5
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
B mergesort/rekursion Java Basics - Anfänger-Themen 9
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
P Compiler-Fehler StackOverFlow Java Basics - Anfänger-Themen 4
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
M StackOverflow Problem Java Basics - Anfänger-Themen 9
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
L StackOverFlow, finde Grund nicht! Java Basics - Anfänger-Themen 5
O StackOverflow für Eingabewerte berechnen Java Basics - Anfänger-Themen 3
J Stackoverflow-Abbruchbedingung Java Basics - Anfänger-Themen 7
G StackOverflow Fehler Java Basics - Anfänger-Themen 3
Y stackoverflow fehler Java Basics - Anfänger-Themen 7
G Stackoverflow! Java Basics - Anfänger-Themen 14
S Stackoverflow Error Java Basics - Anfänger-Themen 5
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
C StackOverflow Error, objekte öfters erzeugen Java Basics - Anfänger-Themen 6
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
P StackOverFlow - SocketTimeoutException Java Basics - Anfänger-Themen 12
frau-u StackOverflow - woher kommt es? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben