Hallo,
ich muss in meiner Übungsaufgabe den Sortieralgorithmus MergeSort codieren. Dabei bekomme ich immer eine Index out of Bounds Fehlermeldung!
Die Aufgabenstellung lautet dabei wie folgt:
Ich habe schon länger gegoogelt und auch die Forensuche habe ich benutzt, aber nichts hilft mir wirklich weiter. Ich gebe zu die rekursion von mergeSort ebenfalls nicht voll verstanden zu haben, vielleicht kommt daher auch mein Problem.
Ich benutze Eclipse als CASE-Tool und habe auch den Debugger schon ausprobiert, aber da ich diesen noch nie verwendet habe ist das alles nicht so hilfreich.
Ich hoffe ihr könnt mir helfen und da es mein erster Beitrag ist hoffe ich euch auch alle Informationen gegeben zu haben. Deshalb hier mal die Fehlermeldung und meine Methoden. Danke schon mal im vorraus...
9 8 7 6 5 4 3 2 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at meinPaket.SortSearch.merge(SortSearch.java:199)
at meinPaket.SortSearch.mergeSort(SortSearch.java:152)
at meinPaket.SortSearch.mergeSort(SortSearch.java:150)
at meinPaket.SortSearch.mergeSort(SortSearch.java:151)
at meinPaket.SortSearch.mergeSort(SortSearch.java:150)
at meinPaket.SortSearch.main(SortSearch.java:18)
Methode mergeSort war bereits vorgegeben:
Hier meine fehlerhafte Methode merge:
Hier noch der Aufruf:
ich muss in meiner Übungsaufgabe den Sortieralgorithmus MergeSort codieren. Dabei bekomme ich immer eine Index out of Bounds Fehlermeldung!
Die Aufgabenstellung lautet dabei wie folgt:
- man kopiere sich die beiden Teillisten in die Hilfs-Felder a1 und a2
- man verwende Index-Pointer i=0 für a1, j=0 für a2, und k=l für a
- solange kein Index-Pointer i,j das Ende erreicht hat vergleicht man a1 und a2[j] und kopiert den kleineren Wert nach a[k] dann ist k und entweder i oder j um 1 zu erhöhen
[*]Rest der Teillisten die noch nicht vollständig abgearbeitet ist an a anzuhängen
Ich habe schon länger gegoogelt und auch die Forensuche habe ich benutzt, aber nichts hilft mir wirklich weiter. Ich gebe zu die rekursion von mergeSort ebenfalls nicht voll verstanden zu haben, vielleicht kommt daher auch mein Problem.
Ich benutze Eclipse als CASE-Tool und habe auch den Debugger schon ausprobiert, aber da ich diesen noch nie verwendet habe ist das alles nicht so hilfreich.
Ich hoffe ihr könnt mir helfen und da es mein erster Beitrag ist hoffe ich euch auch alle Informationen gegeben zu haben. Deshalb hier mal die Fehlermeldung und meine Methoden. Danke schon mal im vorraus...
9 8 7 6 5 4 3 2 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at meinPaket.SortSearch.merge(SortSearch.java:199)
at meinPaket.SortSearch.mergeSort(SortSearch.java:152)
at meinPaket.SortSearch.mergeSort(SortSearch.java:150)
at meinPaket.SortSearch.mergeSort(SortSearch.java:151)
at meinPaket.SortSearch.mergeSort(SortSearch.java:150)
at meinPaket.SortSearch.main(SortSearch.java:18)
Methode mergeSort war bereits vorgegeben:
Java:
public static void mergeSort(int[] a, int l, int r){
if(l<r){
int m = (r+l)/2;
mergeSort(a, l, m);
mergeSort(a, m+1, r);
merge(a, l, m, r);
}
}
Hier meine fehlerhafte Methode merge:
Java:
public static void merge(int[] a, int l, int m, int r){
int[] a1 = new int[(a.length+1)/2];
int[] a2 = new int[(a.length+1)/2];
for(int k=l; k <= m; k++) {
a1[k] = a[k];
}
for(int k=m+1; k < r; k++) {
a2[k-(m+1)] = a[k];
}
int k = l;
int i = 0;
int j = 0;
while(i < a1.length && j < a2.length){
if(a1[i]<=a2[j]){
a[k++]=a1[i++];
}else{
a[k++]=a2[j++];
}
}
if(i<m){
while(i<m){
a[k++]=a1[i++];
}
}
if(j<r){
while(j<m){
a[k++]=a2[j++];
}
}
}
Hier noch der Aufruf:
Java:
public static void main(String[] args){
int[] test2 = {9,8,7,6,5,4,3,2,1};
printArray(test2);
System.out.println();
mergeSort(test2, 0, 10);
printArray(test2);
}