Guten Tag,
Ich verstehe das Prinzip der Rekursion nicht ganz. Die Methode merge(int[] links, int[] rechts) habe ich nur zum Verständnis mit reingepostet.
Mein Problem liegt bei der Methode mergeSortCore(int[] a). Also, wenn das Array eine Länge von 1 oder weniger hat, dann wird das Array a einfach ausgegeben. Sonst wird das Array linkeListe und rechteListe erstellt. Also wird das Array a in zwei Teile gesplittet. Aber was soll nun dieses return merge(linkeListe, rechteListe)?
Also ich weiß, dass die Methode mergeSortCore(int[] a) das Array a so lange splitten soll bis nur noch Array der Länge 1 vorhanden sind und die werden dann der Methode merge() übergeben. Aber ich weiß einfach nicht, wie das in der Praxis funktioniert. Also wo sieht man, dass mergeSortCore das so lange splittet und erst bei a.length= 1 übergeben wird..?
Ich würde die Methode ohne Vorkenntnisse einfach so verstehen, dass das Array a einmal in zwei Teile gesplittet wird und dann der Methode merge() übergeben wird, dies ist aber nicht der Fall...
MfG
Code:
public int[] mergeSortCore(int[] a)
{
int[] linkeListe;
int[] rechteListe;
if(a.length <= 1)
{
return a;
}
else
{
linkeListe= linkeListe(a);
rechteListe= rechteListe(a);
linkeListe= mergeSortCore(linkeListe);
rechteListe= mergeSortCore(rechteListe);
return merge(linkeListe, rechteListe);
}
public int[] merge(int[] links, int[] rechts)
{
int[] mergeArray = new int[links.length*2];
links = extendArray(links,links.length+1);
rechts = extendArray(rechts,rechts.length+1);
int k = 0;
int j = 0;
int i = 0;
while(k<mergeArray.length &&i<links.length&&j<rechts.length) {
if(links[i]<rechts[j]) {
mergeArray[k]=links[i];
k++;
i++;
}
else {
mergeArray[k]=rechts[j];
k++;
j++;
}
}
return mergeArray;
}
Ich verstehe das Prinzip der Rekursion nicht ganz. Die Methode merge(int[] links, int[] rechts) habe ich nur zum Verständnis mit reingepostet.
Mein Problem liegt bei der Methode mergeSortCore(int[] a). Also, wenn das Array eine Länge von 1 oder weniger hat, dann wird das Array a einfach ausgegeben. Sonst wird das Array linkeListe und rechteListe erstellt. Also wird das Array a in zwei Teile gesplittet. Aber was soll nun dieses return merge(linkeListe, rechteListe)?
Also ich weiß, dass die Methode mergeSortCore(int[] a) das Array a so lange splitten soll bis nur noch Array der Länge 1 vorhanden sind und die werden dann der Methode merge() übergeben. Aber ich weiß einfach nicht, wie das in der Praxis funktioniert. Also wo sieht man, dass mergeSortCore das so lange splittet und erst bei a.length= 1 übergeben wird..?
Ich würde die Methode ohne Vorkenntnisse einfach so verstehen, dass das Array a einmal in zwei Teile gesplittet wird und dann der Methode merge() übergeben wird, dies ist aber nicht der Fall...
MfG