mergeSort macht nicht das was ich will

Status
Nicht offen für weitere Antworten.

moabita21

Neues Mitglied
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:

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
 
S

SlaterB

Gast
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

Neues Mitglied
genau das ist ja das problem

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

ich bin schon am verzweifeln :cry:
 
S

SlaterB

Gast
falls das Thema noch nicht beendet ist:
ich helfe dir gerne, wenn du mitarbeitest, siehe vorheriges Post ;)
 
Status
Nicht offen für weitere Antworten.

Oben