Hallo ihr lieben,
an unsrer Uni haben wir zur Zeit das Thema Sortieren und Suchen. das heißt wir sollen verschiedene Sortieralgorithmen schreiben. Wir programmieren in im Moment noch mit Haskell, also funktional. Ich habe den Bubbelsortalgorithmus geschrieben. Hat mich eigentlich gewundert, denn es hat beim ersten Interpretieren schon funktiniert
Meine Problem ist nun, dass ich für jeden bubble die eine fkt über die Liste laufen lassen muss ob sie denn schon sortiert ist, wenn nicht muss die funktion springen nochmal durch die ganze Liste springen. Ist natürlich extrem langsam. Ich hab dir Fkt mal mit (reverse[1…10000]) also dem worst case aufgerufen, die Folge war, nach ca 20 Sek. hat mein Pc den Prozess gekillt
Hier mal mein Code:
-- springen ist "fast" analog zum Algorithmus geschrieben, z.B: [3,2,7,1]
-- 3 \> 2 =\> 3 springt über zwei, (3 und zwei tauschen also)
-- 3 Algorithmus beginnt von neuem, mit veränderter liste [2,3,7,1]
-- 2 1 =\> Algorithmus beginnt von neuem, mit veränderter liste [1,2,3,7] fertig
springen :: [Integer] -\> [Integer]
springen [x] = [x]
springen (x:xs:xl) = if x \> xs then springen(xs:x:xl) else x : springen(xs:xl)
-- istkleiner benötige ich für die Hauptfkt bubblesort, sie bewirkt den erneuten Aufruf der Springenfkt.
istkleiner :: [Integer] -\> Bool
istkleiner [] = True
istkleiner [x] = True
istkleiner (x:xs:xl) = if x [Integer]
bubblesort (x:xs) = if istkleiner(x:xs) then (x:xs) else bubblesort(springen(x:xs))
hat jemand eine Idee wie ich den ganzen Algorithmus verbessern kann?
lg Matthias