hi , ich hab die aufgabe bekommen den mergeSort-algorthymus zu implemntieren.
naja ich hatte schonmal einen anderen versuch gestartet , der auch ziemlich weit ging aber nicht alles richtig machte.
so nun hab ich bei wikipedia den pseudocode mit angeschaut und alles nachgebaut:
wikicode:
funktion mergesort(liste);
falls (Größe von liste <= 1) dann antworte liste
sonst
halbiere die liste in linkeListe, rechteListe
merge(mergesort(linkeListe), mergesort(rechteListe));
funktion merge(linkeListe, rechteListe);
neueListe
solange (linkeListe und rechteListe nicht leer)
| falls (erstes Element der linkeListe <= erstes Element der rechteListe)
| dann füge erstes Element linkeListe in die neueListe hinten ein und entferne es aus linkeListe
| sonst füge erstes Element rechteListe in die neueListe hinten ein und entferne es aus rechteListe
solange_ende
falls (linkeListe nicht leer) dann füge linkeListe in die neueListe hinten ein
falls (rechteListe nicht leer) dann füge rechteListe in die neueListe hinten ein
antworte neueListe
Mein Javacode:
das lArr und rArr sind korrekt gefüllt, es hat sicherlich was mit dem merge zu tun, aber was ist da falsch?
kann mir einer helfen??
grüße
naja ich hatte schonmal einen anderen versuch gestartet , der auch ziemlich weit ging aber nicht alles richtig machte.
so nun hab ich bei wikipedia den pseudocode mit angeschaut und alles nachgebaut:
wikicode:
funktion mergesort(liste);
falls (Größe von liste <= 1) dann antworte liste
sonst
halbiere die liste in linkeListe, rechteListe
merge(mergesort(linkeListe), mergesort(rechteListe));
funktion merge(linkeListe, rechteListe);
neueListe
solange (linkeListe und rechteListe nicht leer)
| falls (erstes Element der linkeListe <= erstes Element der rechteListe)
| dann füge erstes Element linkeListe in die neueListe hinten ein und entferne es aus linkeListe
| sonst füge erstes Element rechteListe in die neueListe hinten ein und entferne es aus rechteListe
solange_ende
falls (linkeListe nicht leer) dann füge linkeListe in die neueListe hinten ein
falls (rechteListe nicht leer) dann füge rechteListe in die neueListe hinten ein
antworte neueListe
Mein Javacode:
Code:
public class mergeSerki {
static int[] testArr = {3,1,6,9,12,14};
static int[] array = null;
public static void main (String[] args){
mergeSort(testArr);
for(int wert: array){
System.out.println("Ergebnis:" + wert);
}// Schleife zur Ausgabe der Werte aus dem array
}
public static void mergeSort(int[] a){
int[] lArr = null;
int[] rArr = null;
if(a.length <= 1){
System.out.println(a[0]);
}else{
lArr = new int[a.length / 2];
rArr = new int[a.length / 2];
for(int i = 0; i < a.length/2;i++){
lArr[i] = a[i];
}
int i = 0;
for(int j = a.length/2; j< a.length;j++){
rArr[i] = a[j];
i++;
}
// for(int wert: lArr){
// System.out.println("ErgebnisL:" + wert);
// }// Schleife zur Ausgabe der Werte aus dem lArr
//
// for(int wert: rArr){
// System.out.println("ErgebnisR:" + wert);
// }// Schleife zur Ausgabe der Werte aus dem rArr
}//else
merge(lArr,rArr);
}//mergeSort
public static int[] merge(int[] l , int[] r){
array = new int[l.length + r.length];
int posL = 0; int posR = 0; int posA = 0;
while(posL < l.length && posR < r.length){
if(l[posL]<= r[posR]){
array[posA] = l[posL];
posA++; posL++;
}else{
array[posA] = r[posR];
posA++; posL++;
}
}
if(posL < l.length){
array[posA] = l[posL];
posA++;posL++;
}
if(posR < r.length){
array[posA] = r[posR];
posA++;posR++;
}
return array;
}
}//mergeSerki
das lArr und rArr sind korrekt gefüllt, es hat sicherlich was mit dem merge zu tun, aber was ist da falsch?
kann mir einer helfen??
grüße