Hallo,
ich stehe grade irgendwie aufm Schlauch. Ich soll einen MergeSort implementieren, der Konstruktor füllt ein Array der Länge n mit Zufallszahlen von 0 bis 100. Funktioniert auch.
Nur irgendwie verstehe ich nicht, wie ich mit der Methode
arbeiten soll. Das Ganze soll halt rekursiv realisiert werden.
Wie der Algor. i.A. aussehen muss verstehe ich, aber wie die Rekursion genau ablaufen soll eben nicht.
Hier mal das, was ich schon gemacht habe.
Irgendwas stimmt da nicht. Ich muss ja zuerst per Rekursivenaufruf die Liste bis auf jeweils 1 Elt. splitten.
ich stehe grade irgendwie aufm Schlauch. Ich soll einen MergeSort implementieren, der Konstruktor füllt ein Array der Länge n mit Zufallszahlen von 0 bis 100. Funktioniert auch.
Nur irgendwie verstehe ich nicht, wie ich mit der Methode
Java:
void mergeSort(int lower, int upper)
Wie der Algor. i.A. aussehen muss verstehe ich, aber wie die Rekursion genau ablaufen soll eben nicht.
Hier mal das, was ich schon gemacht habe.
Java:
public class MergeSort {
int[] array;
int[] left;
int[] right;
int[] newList;
public MergeSort(int n) {
array = new int[n];
for(int i=0;i<array.length;i++) {
double random = (Math.random()*101);
int cast = Math.round((int)random);
array[i] = cast;
System.out.println("Array["+i+"]: "+array[i]);
}
}
void mergeSort(int lower, int upper) {
if(array.length == 1) {
System.out.println("Fertig! "+array[0]);
}else{
left = new int[array.length/2];
for(int j=0;j<array.length/2;j++) {
left[j] = array[j];
System.out.print(left[j]+", ");
}
System.out.println(" ");
right = new int[array.length-left.length];
for(int k=0;k<array.length-left.length;k++) {
right[k] = array[(array.length/2)+k];
System.out.print(right[k]+", ");
//mergeSort(left.length,right.length);
}
System.out.println(" ");
}
for(int l=0;l<left.length;l++) {
//da Eingabe immer gerade
newList = new int[left.length*2];
if(left[l] <= right[l]) {
newList[l] = left[l];
System.out.println(left[l] +"<="+ right[l]+": "+ +newList[l]);
}else{
newList[l] = right[l];
System.out.println(right[l] +"<="+ left[l]+": "+newList[l]);
}
}
}
}
Irgendwas stimmt da nicht. Ich muss ja zuerst per Rekursivenaufruf die Liste bis auf jeweils 1 Elt. splitten.