devideAlterniglyByRuns ohne eine Din A4 Seite voll Code

Vykyfikation
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 9. Mai 2017 12:44

devideAlterniglyByRuns ohne eine Din A4 Seite voll Code

Beitrag von Vykyfikation » 24. Sep 2017 17:09

Hallo, ich habe heute mal devideAlterninglyByRuns aus dem Javaübungsblatt programmiert. Ich bin mir aller dings nicht sicher, ob meine Lösung funktionieren würde jedoch sicher, dass es eine simplere Lösung gibt.
Meine Lösung:

Code: Alles auswählen

public Pair<ListItem<T>> dABR(ListItem<T> l,Comperator comp){
Pair<ListItem<T>> p= new Pair();
if(l==null) return p;
if(l.next==null){
	p.elem1=l;
	return p;
}
boolean eins = true;
while(l.next!=null){
	if(comp.compare(l.key,l.next.key)<1){
		if(eins){
			if(p.elem1==null){
				p.elem1=l;
			}else{
				p.elem1.next=l;
			}
		}else{
			if(p.elem2==null){
				p.elem2=l;
			}else{
				p.elem2.next=l;
			}
		}
	}else{
		if(eins){
			if(p.elem1==null){
				p.elem1=l;
			}else{
				p.elem1.next=l;
			}
			eins=false;
		}else{
			if(p.elem2==null){
				p.elem2=l;
			}else{
				p.elem2.next=l;
			}
			eins=true;
		}
	}
} //ende der while-schleife;
if(eins){
	if(p.elem1==null){
		p.elem1=l;
	}else{
		p.elem1.next=l;
	}
}else{
	if(p.elem2==null){
		p.elem2=l;
	}else{
		p.elem2.next=l;
}
}
		





Vykyfikation
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 9. Mai 2017 12:44

Re: devideAlterniglyByRuns ohne eine Din A4 Seite voll Code

Beitrag von Vykyfikation » 25. Sep 2017 08:51

Bei Quicksort ist zudem die Aufgabenstellung falsch. Dort steht etwas von 4 Parametern, die übergeben werden. Aber was soll der vierte Parameter sein? TreeNode<T>, Comperator und Pivotelement hätte ich jetzt gedacht.

notparanoidbutanandr
Neuling
Neuling
Beiträge: 5
Registriert: 16. Jul 2017 15:31

Re: devideAlterniglyByRuns ohne eine Din A4 Seite voll Code

Beitrag von notparanoidbutanandr » 25. Sep 2017 11:38

Hallo,

bezüglich Quicksort (divideByPivot hieß es glaubeich) gebe ich dir recht, da scheint auf dem Aufgabenblatt ein Fehler unterlaufen zu sein (nicht der einzige imo).

Zu divideAlternatinglyByRuns: Leider gibt es imo keine 'kurze' Lösung. :roll: Dazu meine ich, dass bei deinem Lösungsvorschlag zwei Ungereimheiten drin sind: Standardmäßig soll man denke ich die Eingabeliste nicht manipulieren, deswegen sollte man sich einen Pointer machen darauf. Außerdem denke ich, dass es gefordert ist, dass man am Ende die beiden Listen 'zurückspult'.
Hier mal ein Lösungsvorschlag von mir (aus dem Kopf zitiert, keine Garantie auf Korrektheit):

____________________________

Code: Alles auswählen

<T> Pair<ListItem<T>> divideAlternatinglyByRuns(ListItem<T> list, Comparator<T> cmp){
       Pair<ListItem<T>> p = new Pair<>();
       if(list == null) return p;
       ListItem<T> l = list;
       boolean l1t = true;
       while(l != null){
               if(l.back != null){
                  if(cmp.compare(l.back.key, l.key) > 0) l1t = !l1t;
               }
               if(l1t){
                  if(p.elem1 != null) p.elem1.next = l;
                  p.elem1 = l;
               }
               else{
                     if(p.elem2 != null) p.elem2.next = l;
                     p.elem2 = l;
               }
               l = l.next;
        }
        while(p.elem1.back != null) p.elem1 = p.elem1.back;
        while(p.elem2.back != null) p.elem2 = p.elem2.back;
        return p;
}

_____________________________

Dazu sei angemerkt, dass das 'Zurückspulen' (wie in einem anderen Post von mir vermerkt) natürlich nur mit back funktioniert.
Ich hoffe, dir hiermit zumindest etwas geholfen zu haben.

Viele Grüße

Antworten

Zurück zu „Archiv“