Hallo,
ich sollte für die FH im Rahmen eines Tutoriums eine Aufgabe programmieren.
Das habe ich gemacht, allerdings war der Code nicht lauffähig.
Der Prof hat mir dann seinen Ansatz für diese Aufgabe geschickt, da bekomme ich jedoch ne ArrayIndexOutofBound exception.
Da bin gerade in der Klausurvorbereitung für andere Fächer und ziemlich im Stress bin, möchte ich euch um Hilfe bitten.
In den kommentaren stehen die Aufgabenstellungen
ich sollte für die FH im Rahmen eines Tutoriums eine Aufgabe programmieren.
Das habe ich gemacht, allerdings war der Code nicht lauffähig.
Der Prof hat mir dann seinen Ansatz für diese Aufgabe geschickt, da bekomme ich jedoch ne ArrayIndexOutofBound exception.
Da bin gerade in der Klausurvorbereitung für andere Fächer und ziemlich im Stress bin, möchte ich euch um Hilfe bitten.
In den kommentaren stehen die Aufgabenstellungen
Java:
public class Sortieren {
private int[] zahlen = { 12501, 88, 409, 0, 1587, 1412 };
//1. sort() ruft mergeSort(int from, into to) auf
public void sort() {
mergeSort(0, zahlen.length - 1);
}
private void mergeSort(int from, int to) {
//2. mergeSort()terminiert ohne weitere Aktionen, falls from >=to, denn 0 oder 1 Elemente
//sind schon sortiert
if (from < to) {
//3. falls from<to, ruft mergeSort() rekursiv mergeSort() für die Hälften from bis x und
// x+1 bis to auf. Nach Rückkehr aus den rekursiven Aufrufen sind beide Haelften sortiert
mergeSort(from, from + (to-from) / 2);
mergeSort(from + (to - from) / 2+1,to);
//4. In ein temporäres int-Array werden der Reihe nach jeweils die Elemente beider Hälften
// kopiert. Es wird immer das nächste Element genommen, welches das kleinere beider Hälften
//ist.
int[] temp = new int[to-from-1];// Da kommen sie sortiert
// wieder rein
int index = 0;
int ersteHaelfte2 = from;
int zweiteHaelfte = from + (to - from) / 2 +1;
for (int ersteHaelfte = from; ersteHaelfte <= from + (to-from) /2;ersteHaelfte++) {
while ((zweiteHaelfte<=to)
&& (zahlen[zweiteHaelfte] < zahlen[ersteHaelfte])) {
temp[index] = zahlen[zweiteHaelfte];
zweiteHaelfte++;
index++;
}
if((zweiteHaelfte>to) || (zahlen[ersteHaelfte]< zahlen[zweiteHaelfte])){
temp[index] = zahlen[ersteHaelfte];
//ersteHaelfte++;
index++;
}
}
while (zweiteHaelfte<=to){
temp[index] = zahlen[zweiteHaelfte];
zweiteHaelfte++;
index++;
}
//5. Die sortierte Folge aus dem temporären int-Array wird
//wieder zurückkopiert in das ursprüngliche Array
System.arraycopy(temp, 0, zahlen, from, temp.length);
}
}
}