Archiv für die Kategorie „Algorithmen“

Quicksort in Scheme

Mittwoch, 17. März 2010
(define (my-quicksort l)
  (if (empty? l)
      empty
      (append
       (my-quicksort (filter (lambda (x) (<= x (first l))) (rest l)))
       (list (first l))
       (my-quicksort (filter (lambda (x) (> x (first l))) (rest l)))
      )
  )
)

Aufruf z.B. mit

(my-quicksort '(8 7 5 -4 2 22 9 4 -4 4 11 1 0))

produziert

(list -4 -4 0 1 2 4 4 5 7 8 9 11 22)
PDF erstellen    Sende Artikel als PDF an

Mergesort

Dienstag, 17. November 2009

Mergesort ist ein schneller Algorithmus zum sortieren von Elementen. Er wurde bereits 1945 vorgestellt.

Vorgehensweise
Als erstes teilt man die zu sortierende Liste in der Mitte in 2 Teillisten, um diese dann wieder zu teilen bis man nur noch Listen mit max. zwei Elementen hat. Diese kleinen Listen kann man dann sehr einfach sortieren. Danach werden die kleinen Listen schrittweise wieder zu großen Listen zusammengefügt, wobei man darauf bauen kann, dass alle Listen sortiert sind. Man fügt aber immer nur 2 Listen zu einer Neuen zusammen, weil man sich dabei immer nur die ersten Elemente der beiden Liste ansehen muss. Diese Funktion ist sehr gut durch Rekursion lösbar. Am Ende erhält man das Ergebnis als zusammengesetzte sortierte Liste.

Beispiel

Quelle: http://upload.wikimedia.org/wikipedia/de/thumb/9/99/Mergesort_example.png/600px-Mergesort_example.png

Quelle: http://upload.wikimedia.org/wikipedia/de/thumb/9/99/Mergesort_example.png/600px-Mergesort_example.png

PDF    Sende Artikel als PDF an

Quicksort

Montag, 16. November 2009

Mit Quicksort kann man sehr schnell und Ressourcen sparend sortieren. Den Algorithmus gibt es bereits seit 1960!

Vorgehensweise am Beispiel einer Liste mit Zahlen:
Zuerst wählt man ein zufälliges Pivot-Element (Drehpunktelement). Danach sortiert man die verbleibenden Elemente in 2 Listen, in der Ersten sind alle Elemente die kleiner oder gleich dem Pivot-Element sind, in der Zweiten alle die größer oder gleich sind. Das Pivot-Element merkt man sich – man kann es jetzt bereits als Fertig markieren – und wendet das gleiche Verfahren auf die beiden kleineren Listen an.

Beispiel:
quicksort

Pseudocode und weitere Beispiele: siehe Wikipedia.

PDF    Sende Artikel als PDF an