MergeSort

Neu_ling

Mitglied
Hallo Community,

ich komme beim programmieren eines MergeSort-Algorithmus nicht weiter. Es handelt sich hierbei nur um die Methode mergeSort, die scheinbar nicht klappt. Die Methode merge funktioniert. Ich hoffe ihr könnt einen Fehler entdecken. Ich bekomme bei kleinen Zahlenfolgen(2 Ziffern), das korrekt sortierte Ergebnis heraus. Nur bei mehr Ziffern, werden nur einzelne Zahlen vertauscht.

Mfg Neu_Ling

Java:
public static int[] sortRekursiv(int[] a) {
    int b=0;

    if (a.length == 1) {
        return a;
          }

      int[] links = new int[a.length / 2];
      int[] rechts = new int[a.length - links.length];
      int index = 0;

       while (index < links.length) {
            links[index] = a[index];
              index++;
                  }

       while (index < a.length) {
            rechts[b] = a[index];
              index++;
              b++;

              }


              sortRekursiv(links);
              sortRekursiv(rechts);

                return merge(links, rechts);
                        }
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
ohne in diesem Fall den Fehler zu verraten:
schau dir doch ganz einfach an, was dein Programm macht, mit einem 3er-Array dürftest du nicht gerade überschwemmt werden,
System.out.println() oder ein Debugger helfen dir,

gibt zu Beginn der Methode das Array des Parameters aus (Arrays.toString() oder eine Hilfsmethode)
dann die Länge der beiden Arrays,
dann die befüllten Arrays, evtl. in den Schleifen genau verfolgen wie sich Index, a, b entwickeln

wenn du das alles machst siehst du schon Fehler,
ob du dann noch selbstständig zur Korrektur kommst ist nicht 100% sicher,
aber schon ein ganz anderer Stand als nur den Code zu posten und völlig zu rätseln

so wirst du bei 100 Programmen noch 300 Fehler finden, oder 300 Mal im Forum fragen müssen, deine Wahl
(bei ersten Posting vielleicht bisschen früh viel verlangt, aber früh übt sich, gute Gelegenheit ;) )

edit:
oh, mein vermuteter Fehler ist gar nicht da, weiß gar nicht ob jetzt ein Fehler vorliegt, sieht geradezu richtig aus,

vollständigeres Programm mit merge ließe sich eher testen (also das was ich zuvor beschrieb ;) )
falls nicht von dir zu finden


edit2:
jetzt habe ich wieder einen, bisschen vertracker als ich zuerst im Sinne hatte, da will ich es lieber sagen:
du ignorierst die Rückgabewerte, die sortierten Arrays, innerhalb der Rekursion (Zeile 25+26)
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Wenn du eine IDE wie NetBeans oder Eclipse verwendest, ist das eine großartige Gelegenheit zu lernen, wie ein Debugger funktioniert. Falls nicht, kannst du dir mit [c]System.out.println()[/c] interessante Werte wie Schleifenvariablen ausgeben lassen, und damit nachvollziehen, was schief läuft. Den aktuellen Zustand des Arrays bekommst du mit [c]java.util.Arrays.toString(meinArray)[/c] ausgegeben.
 

Neu_ling

Mitglied
@SlaterB Wo ignoriere ich die Rückgabewerte denn? Ich rechne doch ganz normal mit ihnen weiter oder nicht? Stehe auf dem Schlauch...

@Landei Wo genau müsste ich System.out.println() denn einfügen? Tut mir Leid für die dumme Frage.
 

Landei

Top Contributor
Na wo kannst du denn sehen, dass etwas falsch läuft? Z.B. kannst du dir links und rechts vor und nach dem rekursiven Aufruf anzeigen lassen. Und dann schaust du z.B. ob nur eines der Teilarrays betroffen ist, zeigst beim nächsten Versuch die entsprechenden Schleifenvariablen an u.s.w.

Aber wie gesagt, die bessere Lösung ist ein Debugger.
 
S

SlaterB

Gast
wenn im ersten Schritt ein 3er Array 4,3,2
in 4 und 3,2 aufgetrennt wird,
dann liefert
sortRekursiv(rechts);
ein sortiertes Array 2,3 zurück, 'rechts' selber ist aber nach wie vor 3,2, verwende den Rückgabewert des Aufrufs

System.out.println() kommt letztlich überall hin, eben um z.B. anzuschauen wie 'rechts' nach dessen Sortierung aussieht
 
Ä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 Stackoverflow Java Basics - Anfänger-Themen 5
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
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

Ähnliche Java Themen


Oben