Erklärung Code Mergesort Bitte

Mino1337

Mitglied
Hallo,

Ichs chreibe bald eine Prüfung und bestandteil wird sein einen Code für Mergesort hinzuschreiben. Einfacher als den den ich habe Auswendig zu lernen wäre ihn Perfekt verstanden zu haben damit ich ihn in der Prüfung dann auch Rekonstruieren kann. Deswegen habe ich hier einen Code mitgebracht der Funktioniert und würde gern ein Paar fragen dazu stellen die mir hoffentlich jemand beantwortet.

Ich verstehe das Prinzip Mergesort, nur den Code nicht.


Java:
public class Mergesort {

    public static int[] intArr = {4,2,1,5,0,3,6};

    public int[] sort(int Lo, int Hi) {
        
        if (Lo < Hi) {
            int Mi = (Lo + Hi) / 2;
            
            sort(Lo, Mi);
            sort(Mi + 1, Hi);
            merge(Lo, Mi, Hi);
        }
        return intArr;
    }

    private void merge(int Lo, int Mi, int Hi) {
        int[] arr = new int[intArr.length];
        int i, j;
        for (i = Lo; i <= Mi; i++) {
            arr[i] = intArr[i];
        }
        for (j = Mi + 1; j <= Hi; j++) {
            arr[Hi + Mi + 1 - j] = intArr[j];
        }
        i = Lo;
        j = Hi;
        for (int k = Lo; k <= Hi; k++) {
            if (arr[i] <= arr[j]) {
                intArr[k] = arr[i];
                i++;
            } else {
                intArr[k] = arr[j];
                j--;
            }
        }
    }

    public static void main(String[] args) {
        Mergesort ms = new Mergesort();
        int[] arr = ms.sort(0, intArr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(i + 1 + ": " + arr[i]);
        }
    }
}

Fragen:

1: In Z19 werden i und j initialisiert aber erst in Z26,27 deklariert. Dazwischen jedoch verwendet was geht da vor ? Ist es so das es sich um zwei verschiedene Werte Handelt mit selben namen ? Dann würde aber in den for schleifen ein int vor dem i bzw j fehlen.

2: in Z24 "Hi+Mi..." das bedeutet der Zeiger j startet bei Hi und geht Hoch, wie kann er Hoch gehen, sollte er nicht runter gehen bis zu Mi ?

3: Prinzipiell verstehe ich den Code wenn man es so betrachtet das das Array nur in zwei teile gespalten wird und dann in merge vom Hilfsarray ind Hauptarray sortiert wird. So ists aber nicht, in Sort wird das Array in quasi einser Stellen Aufgespalten und wenn man die in Merge reinlegt dann kommt wieder genau das selbe Array raus wie reingegangen ist. Parrallel dazu findet ja noch die sortierung des Array nur durch 2 geteilt statt. Nach meinem verständniss dürfte keine sortierung stattfinden da die einser Hilfsarrays ganz zum Schluss über alles drüber kopiert werden müssten.

DIe letzte frage dient nur dem verständniss diesen Codes nicht der Sache an sich.

Vielen Dank ich hoffe jemand liest das alles und kann mir etwas Helfen. Dankeschön =)
 

Gucky

Top Contributor
Zu 1: i und j werden in den Schleifen im Kopf initialisiert.
Zu 2: Ich glaube, es wird andersrum gegangen. Nicht
Code:
array[j]
sondern
Code:
array[array.length - j]
. Die beiden Codeschnipsel sind nur zur Verdeutlichung. Das ist ungefähr das, was passiert. Den Mergesort kenne ich nicht.
Zu 3: Hier:
Java:
for (int k = Lo; k <= Hi; k++) {
            if (arr[i] <= arr[j]) {
                intArr[k] = arr[i];
                i++;
            } else {
                intArr[k] = arr[j];
                j--;
            }
        }
wird das ursprüngliche Array mit neuen Werten überschrieben. Ich glaube, das war es, was du meintest.
 

VfL_Freak

Top Contributor
Moin,

1: In Z19 werden i und j initialisiert aber erst in Z26,27 deklariert. Dazwischen jedoch verwendet was geht da vor ? Ist es so das es sich um zwei verschiedene Werte Handelt mit selben namen ? Dann würde aber in den for schleifen ein int vor dem i bzw j fehlen.
Java:
        int i, j;
        for (i = Lo; i <= Mi; i++) {
            arr[i] = intArr[i];
        }
        for (j = Mi + 1; j <= Hi; j++) {
            arr[Hi + Mi + 1 - j] = intArr[j];
        }
        i = Lo;
        j = Hi;
Um mal die Begrifflichkeiten richtig zu stellen:
In der (hier) ersten Zeile werden beide Variablen deklariert !!
In den Signaturen der beiden for-Schleifen werden sie dann jeweils initialisiert ('i' mit dem Wert von 'lo', 'j' mit dem wert von 'Mi') !!
Abschließend werden beiden dann 'nur' neue Wert zugewiesen - 'i' der Wert von 'Lo' und 'j' der Wert von 'Mi' !!

Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
H Primzahltest : Erklärung zum Code Java Basics - Anfänger-Themen 2
A erklärung von code Java Basics - Anfänger-Themen 4
S Code-Erklärung Java Basics - Anfänger-Themen 4
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Erklärung BufferedReader und InputStreamReader Java Basics - Anfänger-Themen 4
S Erklärung zur Methode und array Java Basics - Anfänger-Themen 12
I Array in umgekehrter Reihenfolge - Erklärung - Java Basics - Anfänger-Themen 3
KogoroMori21 Erklärung zum Ternären Operator Java Basics - Anfänger-Themen 4
D Erklärung Java Basics - Anfänger-Themen 3
A Erklärung Programm zur Kreisberechnung Java Basics - Anfänger-Themen 43
S Bitweise Operatoren" >>>",">>","<<" erklärung Java Basics - Anfänger-Themen 5
D Erklärung eines Satzes Java Basics - Anfänger-Themen 0
M Erklärung: Int IndexOf (String s) Java Basics - Anfänger-Themen 3
C Methoden erklärung Java Basics - Anfänger-Themen 8
W FileReader - Bitte um Erklärung Java Basics - Anfänger-Themen 7
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
D Erklärung static boolean Java Basics - Anfänger-Themen 6
J Bitte um Erklärung Java Basics - Anfänger-Themen 4
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
O Über Map laufen Erklärung Java Basics - Anfänger-Themen 4
N While Schleife Erklärung Bitte Java Basics - Anfänger-Themen 3
B Benötige Erklärung für Lösungsansatz Java Basics - Anfänger-Themen 0
M web.xml Abschnitt Erklärung Java Basics - Anfänger-Themen 2
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
A DezimalZuBinär - Erklärung der Vorgehensweise des Programms Java Basics - Anfänger-Themen 4
Z Fibonacci Array Erklärung Java Basics - Anfänger-Themen 5
K Erste Schritte Datenbank SQL erklärung Java Basics - Anfänger-Themen 15
H Methoden Bitte um Erklärung der askString-Methode Java Basics - Anfänger-Themen 15
G Erklärung .next Java Basics - Anfänger-Themen 4
D Erklärung Kalenderwoche Java Basics - Anfänger-Themen 14
T Erklärung zur Methode, Modulator Java Basics - Anfänger-Themen 3
V Objekte/Klassen erstellen - Erklärung anhand Beispiel Java Basics - Anfänger-Themen 4
P Methoden Erklärung wie ich eine spezielle Methode richtig anwende Java Basics - Anfänger-Themen 9
S Threads Erklärung ReentrantLock Java Basics - Anfänger-Themen 6
B Kleine Erklärung zu einer Codezeile benötigt Java Basics - Anfänger-Themen 5
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
R Interpretation/Erklärung main Java Basics - Anfänger-Themen 4
Helgon Polymorphie Generischer Methodenkopf - Erklärung Java Basics - Anfänger-Themen 3
W OOP Konstruktoren Erklärung Java Basics - Anfänger-Themen 14
E Quellcode Erklärung Java Basics - Anfänger-Themen 8
R Vererbung Bitte um Erklärung - Instanzvariablen Java Basics - Anfänger-Themen 8
A Java Erklärung? Java Basics - Anfänger-Themen 4
D Beans Erklärung Java Basics - Anfänger-Themen 11
Q Klausur aufgabe Erklärung Java Basics - Anfänger-Themen 12
G Bitte um Erklärung Java Basics - Anfänger-Themen 9
O Erklärung für Pattern Java Basics - Anfänger-Themen 5
K gute erklärung Java Basics - Anfänger-Themen 5
Screen Erklärung von der Umwandlung von .class in .jar o. .exe ! Java Basics - Anfänger-Themen 5
Spin Taschenrechner - Erklärung Java Basics - Anfänger-Themen 9
J Bitte um Erklärung für einen Java-Ausdruck Java Basics - Anfänger-Themen 8
M enhanced for - erklärung Java Basics - Anfänger-Themen 3
K Erklärung der Syntax Java Basics - Anfänger-Themen 6
R Erklärung bitte Java Basics - Anfänger-Themen 3
G Erklärung for-Schleife bei Strings Java Basics - Anfänger-Themen 4
tobiasbeil Fehler array initialisierung. Nur erklärung bitte. Java Basics - Anfänger-Themen 2
W Programm erklärung Java Basics - Anfänger-Themen 7
F Threads - Erklärung und Beispielprogramm Java Basics - Anfänger-Themen 4
D Erklärung für eine Abfrage. Java Basics - Anfänger-Themen 9
D Eine Erklärung für eine 3D-Schleife bitte. :) Java Basics - Anfänger-Themen 4
B [suche erklärung] - sicherheit beim login Java Basics - Anfänger-Themen 3
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 3
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben