HaskellWiki

Haskell | Wiki community | Recent changes
Random page | Special pages

 

Not logged in
Log in | Help

Quicksort

Categories: Ro

Cea mai scurta implementare de algoritm Quicksort
se poate face in Haskell astfel:

quick      :: [Integer] -> [Integer] 
quick []   = [] 
quick (h:t)= quick  [ y | y <- t , y < h] ++ [h] ++  quick  [ y | y <- t , y > h]

Matematicienii vor recunoaste imediat ideea care l-a inspirat: Daca separam primul element dintr-o lista (multime ordonata) restul se poate sorta sortand recursiv multimea elementelor mai mici si a celor mai mari ca el. Apoi e suficient sa concatenam aceste multimi ordonate:

{ y | y <- t , y < h }
{h}
{ y | y <- t , y > h}

Versiunile Quicksort-ului in Pascal, C , C++, Java si alte "C-like languages" sunt cam de 10 ori mai lungi !!!

P.S. Ei bine am exagerat putin, adevaratul Quicksort ar trebui sa aleaga intai pivotul apoi sa faca apelul recursiv. Oricum, in Haskell multe programe se pot scrie repede, inclusiv algoritmi ca cel de mai sus, deoarece beneficiem de acele liste descrise in stilul multimilor de la matematica.


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.

Retrieved from "http://haskell.org/haskellwiki/Quicksort"

This page has been accessed 1,289 times. This page was last modified 09:20, 23 January 2008. Recent content is available under a simple permissive license.