Guten Abend,
ich habe mich nun auch an einer Mergesort Implementierung versucht, finde jedoch hier ebenfalls den Fehler nicht. Wenn ich die Methode Mergesort aufrufe habe ich im Ergebnisarray nachher mysteriöserweise nur Nullen liegen.
Von der Logik her scheinen mir die Abläufe korrekt. Habe eher die Vermutung, dass es an void / return Methoden liegt?
Es wäre daher sehr nett, wenn mir jemand etwas Hilfestellung bzw. einen Hinweis geben könnte, wo ich mal suchen könnte.
Danke und Gruß
ich habe mich nun auch an einer Mergesort Implementierung versucht, finde jedoch hier ebenfalls den Fehler nicht. Wenn ich die Methode Mergesort aufrufe habe ich im Ergebnisarray nachher mysteriöserweise nur Nullen liegen.
Von der Logik her scheinen mir die Abläufe korrekt. Habe eher die Vermutung, dass es an void / return Methoden liegt?
Es wäre daher sehr nett, wenn mir jemand etwas Hilfestellung bzw. einen Hinweis geben könnte, wo ich mal suchen könnte.
Danke und Gruß
Java:
public class Mergesort {
public static int [] merge(int [] a, int l, int m, int r) {
int [] b = new int[a.length];
int i = l; // dient zum Durchlaufen von a[l...m]
int j = m+1; // dient zum Durchlaufen von a[m+1...r]
int k = l; // b[k] ist das nächste Element der Ergebnisfolge
while(i<=m && j<=r) {
if(a[i] < a[j]) {
b[k] = a[i];
i++;
}
else {
b[k] = a[j];
j++;
}
k++;
}
if(i>m) { // a[l...m] ist durchlaufen, übernehme Rest von a[m+1...r]
for(int h=j; h<=r; h++) {
b[k+h-j] = a[h];
}
}
else { // j>m, a[m+1...r] ist durchlaufen, übernehme Rest von a[l...m]
for(int h=i; h<=m; h++) {
b[k+h-i] = a[h];
}
}
// kopieren
for(int p = 0; p<a.length; p++) {
a[p] = b[p];
}
return a;
}
public static void Mergesort(int [] a, int l, int r) {
if(l<r) {
int m = (l+r)/2;
Mergesort(a,l,m);
Mergesort(a,m+1,r);
merge(a,l,m,r);
}
}
public static void main(String [] args) {
int [] a = new int[] {1,8,3,9,5,2,10,7,4};
Mergesort(a,0,a.length-1);
for(int i=0; i<a.length; i++) {
System.out.print(a[i]);
}
}
}