2008-03-28

yorool_gui: (Default)
2008-03-28 11:25 am

haskell-ное: впадаю в детство

qsort, qsort... Какой-такой qsort... Сортировка пузырьком - наше все:

IMHO получилось не сложнее, чем на C каком-нибудь:
import Data.Array
import System.Random

bubbleSort :: Ord e => Array Int e -> Array Int e
bubbleSort a = let (o,size) = bounds a
                   swap a n | (a!n) > (a!(n+1)) = a // [(n,a!(n+1)),(n+1,a!n)]
                   swap a n = a
                   pass a n = foldl swap a [ o .. n ]
               in  foldl pass a $ reverse [ o .. size-1 ]

main = do s <- sequence $ take 10 $ repeat $ randomRIO (0::Int,100)
          let a = listArray (0,length(s)-1) s
              a' = bubbleSort a
          sequence $ map (putStrLn.show) (elems a')