Gepostet: |
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 | ||||||||||
Gepostet: |
|||||||||||
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 | |||||||||||
Gepostet: |
|||||||||||
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 | ||||||||||
Gepostet: |
|||||||||||
Eine insert-Funktion ist schon vordefiniert, damit ist der Algorithmus trivial:insertSort = foldr insert [] |
|||||||||||
Zum Seitenanfang | |||||||||||