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.
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 =)
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 =)