# mergeSort macht nicht das was ich will



## moabita21 (21. Mai 2007)

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:


```
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


----------



## SlaterB (21. Mai 2007)

was geht denn nicht?
finde heraus, welcher konkrete Schritt falsch ist, dann ist es meist offensichtlich, was zu reparieren ist,

baue überall System.out.println ein, um die einzelnen Arbeitsschritte genauestens zu verfolgen,
und fange mit einem kleinen Array an, 2er oder 3er, werden die korrekt sortiert?


----------



## moabita21 (21. Mai 2007)

genau das ist ja das problem

ich kriege als ausgabe-ergebnis genau das selbe feld wieder.

ich bin schon am verzweifeln :cry:


----------



## SlaterB (21. Mai 2007)

falls das Thema noch nicht beendet ist:
ich helfe dir gerne, wenn du mitarbeitest, siehe vorheriges Post


----------

