MergeSort mit Liste

newbie2009

Bekanntes Mitglied
Hey Leute ich brauch ma eure Hilfe, wir sollen MergeSort implementieren mit der Verwendung einer eigenen Klasse(einfach verkettete liste), die wir implementiert haben und die folgende Methoden hat:
Java:
public class Daten {

	DatenSatz kopf = new DatenSatz(1000000002);
	DatenSatz ende= new DatenSatz(1000000001);
	

	
		public Daten(){
			kopf.setNext(ende);
			ende.setNext(null);
			
		}
		
		
void vornanhängen(int k){
	DatenSatz neu = new DatenSatz(k);
	neu.setNext(kopf);// neu.next bekommt die referenz von kopf
	kopf=neu;


}

void deletefirst(){// löscht erstes element der liste
	kopf=kopf.getNext();


	
}
		
		
		
public void ausgeben(){ // gibt komplette liste aus
	DatenSatz aktuell= kopf;
	while(aktuell!=null){
		System.out.println(aktuell.lieferWert());
		aktuell=aktuell.getNext();
	}
	
}


void hintenanhängen(int j){ // hängt ein element ans ende der liste
	DatenSatz neu = new DatenSatz(j);
	DatenSatz help=neu;
	neu=kopf;
	
	while(neu.getNext()!=null){
		neu=neu.getNext();
	}
	
	ende.setNext(help);
	ende=help;
	
   
	
	
}

void listeerstellen(int anzahl){
	
	for(int i=0;i<anzahl-2;i++){
		int jo =( int)((Math.random()*100)+1);
		hintenanhängen(jo);
	}
	
	
}

Den MergeSort algorithmus verstehe ich, aber das auf Listen anzuwenden, bereitet mir Schwierigkeiten, ich weiß nicht so recht, wie ich die liste halbieren soll , mir fehlt da irgendwie der Ansatz.
 

Landei

Top Contributor
Liste halbieren? Wie wäre es damit:
Kopf der Liste abschneiden, in Teilliste 1 packen
Kopf der Liste abschneiden, in Teilliste 2 packen
Kopf der Liste abschneiden, in Teilliste 1 packen
Kopf der Liste abschneiden, in Teilliste 2 packen
...
 

newbie2009

Bekanntes Mitglied
klingt logisch :)

also sagen wir mal wir haben 10 elemente in der liste,
dann erstelle ich 2 neue Teillisten und mache folgendes:


5 mal kopf abschneiden und packe diesen in die erste teilliste und 5 mal kopf abschneiden in die zweite teilliste ? oder eher abwechselnd?
 

Landei

Top Contributor
Warum habe ich das wohl abwechselnd geschrieben? Ganz einfach: Weil man dann nicht mal die Länge der Liste kennen muss, beide Listen werden automatisch (soweit das möglich ist) gleichlang.
 

newbie2009

Bekanntes Mitglied
Warum habe ich das wohl abwechselnd geschrieben? Ganz einfach: Weil man dann nicht mal die Länge der Liste kennen muss, beide Listen werden automatisch (soweit das möglich ist) gleichlang.



ja habe aber eh noch eine methode, die die länge der liste bestimmt :) von daher ist es nich ausschlaggebend funzt auch so ^^.

Java:
static	void teillistenerstellen(Daten liste){
				
				Daten listehalb=new Daten();
				Daten listehalb2=new Daten();
			
				int j=liste.size(liste.kopf)/2;
				int z=liste.size(liste.kopf)-j;
				
				for(int i=0;i<j;i++){
					
					listehalb.hintenanhängen(liste.kopf.lieferWert());
					liste.deletefirst();
					
				}
				listehalb.deletefirst();
				listehalb.deletefirst();
				
				for(int zu=0;zu<j;zu++){
					
					listehalb2.hintenanhängen(liste.kopf.lieferWert());
					liste.deletefirst();
					
				}
				
					listehalb2.deletefirst();
					listehalb2.deletefirst();
				
					if(listehalb.size(listehalb.kopf)>0){
						teillistenerstellen(listehalb);
						}

					if(listehalb2.size(listehalb2.kopf)>0){
						teillistenerstellen(listehalb2);
					}
				
	
				
			}
			
			
			
			
		
}

könnte das so funzen ? oder ist der rekursive aufruf nicht ganz korrekt?
 

Landei

Top Contributor
So würde ich es mit einer normalen Liste machen:
Java:
    public static <T extends Comparable<T>> List<T> sort(List<T> list) {
        if (list.size() <= 1) {
            return list;
        } else {
            List<T> one = new LinkedList<T>();
            List<T> two = new LinkedList<T>();
            while (!list.isEmpty()) {
                one.add(list.remove(0));
                if (!list.isEmpty()) {
                    two.add(list.remove(0));
                }
            }
            one = sort(one);
            two = sort(two);
            List<T> result = new LinkedList<T>();
            while (!(one.isEmpty() && two.isEmpty())) {
                result.add(one.isEmpty()
                        || (!two.isEmpty() && one.get(0).compareTo(two.get(0)) > 0)
                        ? two.remove(0) : one.remove(0));
            }
            return result;
        }
    }
 

newbie2009

Bekanntes Mitglied
puh so viele generics :) , muss ich die methode erstma nachvollziehen :)
aber danke :)
Java:
 while (!(one.isEmpty() && two.isEmpty())) {
                result.add(one.isEmpty() || (!two.isEmpty() && one.get(0).compareTo(two.get(0)) > 0)
                        ? two.remove(0) : one.remove(0));
            }
            return result;
        }
MM könntest du die anweisung vll bisschen erklären, ich verstehe den teil mit result.add(one.isEmpty()
nicht so wirklich.

danke im voraus :(
 
Zuletzt bearbeitet:

Landei

Top Contributor
OK, das war vielleicht ein wenig zuviel zusammengeschrumpelt. Der ternäre Operator
Java:
a = bedingung ? b : c;
ist eigentlich nur eine Abkürzung für
Java:
if(bedingung) { a = b; } else { a = c; }
Er ist also sozusagen ein if-else, das einen Wert zurückgibt.

In der Schleife habe ich vier Fälle abzuhandeln (dass one und two leer sind, schließe ich ja schon von vornherein im while aus)
1) one ist leer -> nimm das erste Element von two
2) two ist leer -> nimm das erste Element von one
3) das erste Element von one ist kleiner als das von two -> nimm das erste Element von one
4) das erste Element von two ist kleiner als das von one -> nimm das erste Element von two

Meine Bedingung fasst die Punkte 1) und 4) zusammen, 2) und 3) sind dann der "else"-Zweig.

Über die Generics mach dir mal keinen Kopf. Im Prinzip sage ich mit <T extends Comparable<T>> nur: Ein Typ, der "vergleichbar" ist, also eine compareTo-Methode besitzt. Du kannst also mental überall wo T steht, einfach "String" oder "Integer" oder "Date" oder so einsetzen...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
P MergeSort mit Liste Java Basics - Anfänger-Themen 4
P Mergesort (zyklische Liste) Java Basics - Anfänger-Themen 2
L Mergesort (aber anders) Java Basics - Anfänger-Themen 2
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
E Methoden 2 Arrays sortieren (MergeSort) Java Basics - Anfänger-Themen 3
H Mergesort aufwand berechen Java Basics - Anfänger-Themen 5
I MergeSort iterativ mit Stacks Java Basics - Anfänger-Themen 13
L Methoden Mergesort methode Java Basics - Anfänger-Themen 4
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
A Rekursion (anhand von Mergesort) nachvollziehen Java Basics - Anfänger-Themen 4
M Erklärung Code Mergesort Bitte Java Basics - Anfänger-Themen 3
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Mergesort Probleme Java Basics - Anfänger-Themen 4
I Mergesort mit ArrayList Java Basics - Anfänger-Themen 4
C Mergesort Java Basics - Anfänger-Themen 4
H MergeSort (für Anfänger ) Java Basics - Anfänger-Themen 9
N MergeSort Java Basics - Anfänger-Themen 8
M MergeSort - Zahlen verschwinden Java Basics - Anfänger-Themen 2
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
B Methoden Natural Mergesort Java Basics - Anfänger-Themen 2
P Mergesort || 2 SetLists mischen Java Basics - Anfänger-Themen 2
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
P Probleme bei codierung von MergeSort Java Basics - Anfänger-Themen 4
M MergeSort - Threads in Anwendung bremsen alles! Java Basics - Anfänger-Themen 4
Houly Mergesort Java Basics - Anfänger-Themen 4
M Mergesort Java Basics - Anfänger-Themen 11
C MergeSort Problem Java Basics - Anfänger-Themen 5
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
B mergesort/rekursion Java Basics - Anfänger-Themen 9
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
R Liste und Arrays Java Basics - Anfänger-Themen 12
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
M Verkettete Liste Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
L Hilfe! Liste mit Items werden ausgegeben aber nicht in zufälliger Reihenfolge Java Basics - Anfänger-Themen 6
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
I 2D-Array Position der Liste ausgeben. Java Basics - Anfänger-Themen 2
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
thor_norsk Verkette Liste Java Basics - Anfänger-Themen 27
R Rückgabe: verkettete Liste Java Basics - Anfänger-Themen 2
R einfach verkettete Liste Java Basics - Anfänger-Themen 1
R einfach verkettete Liste Java Basics - Anfänger-Themen 12
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B GUI extension mit einer Liste verbinden Java Basics - Anfänger-Themen 1
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
M Java Liste streamen Java Basics - Anfänger-Themen 10
AmsananKING Aussortierung einer Liste Java Basics - Anfänger-Themen 8
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
J Doppelt verkette Liste ich bitte um Hilfe Java Basics - Anfänger-Themen 4
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
B Hilfe bei Map Liste erstellen Java Basics - Anfänger-Themen 10
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Gaudimagspam Linked Liste Java Basics - Anfänger-Themen 4
Z Liste umkehren Java Basics - Anfänger-Themen 1
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
A Doppelt verkettete Liste rückwärts ausgeben Java Basics - Anfänger-Themen 17
P Verschachtelte Array Liste Java Basics - Anfänger-Themen 2
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
P Performance Array und Liste Java Basics - Anfänger-Themen 13
M QuickSort und Liste Java Basics - Anfänger-Themen 6
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben