Die Funktion soll sich nach Beendigung der Rekursion wiederholen?
Ich versuche, Bubblesort in Haskell zu implementieren:
bsort:: (Ord a) => [a] -> [a]
bsort [] = []
bsort [x] = [x]
bsort (x:y:xs)
| x <= y = x: bsort(y:xs)
| x >= y = y: bsort(x:xs)
Nachdem die Funktion ausgeführt wurde, wird der gesamte Vorgang nicht noch einmal wiederholt, so dass die Liste nicht vollständig sortiert ist. Wie kann ich der Funktion sagen, dass sie sich wiederholen soll, bis die Liste vollständig sortiert ist?
Wenn ich zum Beispiel eintippe: bsort [1,5,2,4] erhalte ich [1,2,4,5]
aber wenn ich eintippe: bsort [9,6,1,5,2,4] erhalte ich [6,1,5,2,4,9], wie sage ich, dass der Prozess mit [6,1,5,2,4,9] wiederholt werden soll?
1 Antwort
Eine Zahlvariable mit übergeben, diese jeweils bei einem Durchlauf runterzählen und wenn sie 0 ist wird nicht weiter wiederholt.
Die Zählvariable nutzt du evtl. gleich als Index, aber dem mit der Sortierung gestartet werden soll, denn sobald das erste Element sortiert ist brauchst du ja erst ab dem zweitem Index weiterzusortieren, etc.
In Haskel programmierst du das dnan vermutlich etwa so, dass du im Fall gleich 0 die Liste zurückgibst und ansonsten f(Liste, n-1) oder so.