www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Anfaenger

Gepostet:
19.12.2010 10:39

Insertionsort  
Hallo,

nun hänge ich bei Insertionsort, allerdings bin ich glaube ich eher auf dem Holzweg :-(
Ich habe mir mal meine Ansätze so geschrieben wie es für mich Sinn macht, etwas primitiv mit den vielen head und tail.

insert :: [Integer] -> [Integer]
insert [] = []
insert (x:xs) = if head x <= head(tail(x)) then head (x) : (head(tail(x))) else (head(tail(x))) : head (x) insert (xs)

Ich weiß dass es garnicht so funktionieren kann weil somit nur die zwei nächsten Elemente (rekursion) der Eingabe Liste verglichen und geordnet werden und anschließend an die Ergebnis liste hinten eingefügt werden. Was mache ich also falsch?

vielen Dank schon mal für eure Hilfe

Liebe Grüße Matthias
Zum Seitenanfang ICQ    
 
Siracusa

Gepostet:
19.12.2010 17:17

   
Also deine ganzen heads und tails sind nicht nur unnötig, sondern auch falsch benutzt. x : xs sagt ja, dass x das erste Element der Eingabeliste, und xs die ganze Liste ohne das erste Element ist. head und tail auf x anzuwenden funktioniert nur, falls x wiederum eine Liste ist, was hier ja nicht der Fall ist. Du müsstest insert erstmal noch um einen weiteren Parameter erweitern, der in die Liste eingefügt werden soll. Dann die Liste durchgehen und das Element an der richtigen Stelle einsortieren. Und dann kannst du insert als Hilfsfunktion für die "richtige" Sortierfunktion verwenden.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Anfaenger

Gepostet:
25.12.2010 00:48

   
Hallo Siracusa,

danke für deine Hilfe, bei Gelegenheit versuche ich es nochmal von neuem. Jetzt geht es schon wieder mit einem neuen Thema los. :-(

liebe Grüße und frohe Weihnachten, wünscht Matthias
Zum Seitenanfang ICQ    
 
Landei

Gepostet:
21.01.2011 12:15

   
Eine insert-Funktion ist schon vordefiniert, damit ist der Algorithmus trivial:

insertSort = foldr insert []
Zum Seitenanfang