quicksort works
This commit is contained in:
parent
49ef3f9f7c
commit
5e1c81beb7
1 changed files with 39 additions and 8 deletions
|
|
@ -1,3 +1,21 @@
|
|||
toStr : List Int -> List Char
|
||||
toStr xs = case xs of
|
||||
Cons a as => Cons (toChar a) (toStr as)
|
||||
Nil => Nil
|
||||
|
||||
toChar : Int -> Char
|
||||
toChar x = case x of
|
||||
0 => '0'
|
||||
1 => '1'
|
||||
2 => '2'
|
||||
3 => '3'
|
||||
4 => '4'
|
||||
5 => '5'
|
||||
6 => '6'
|
||||
7 => '7'
|
||||
8 => '8'
|
||||
9 => '9'
|
||||
|
||||
filter p xs = case xs of
|
||||
Nil => Nil
|
||||
Cons x xs => case p x of
|
||||
|
|
@ -8,16 +26,29 @@ filter p xs = case xs of
|
|||
Nil => bs
|
||||
Cons x xs => Cons x (xs ++ bs)
|
||||
|
||||
.<= a b = case a < b of
|
||||
False => a == b
|
||||
True => True
|
||||
.:: a as = Cons a as
|
||||
|
||||
quicksort : List Int -> List Int
|
||||
quicksort xs = case xs of
|
||||
Nil => Nil
|
||||
Cons a as => quicksort (filter (\y. a < y) xs) ++ (Cons a (quicksort (filter (\y. y <= a)) xs))
|
||||
Cons a as => let smaller = quicksort (filter (\y. y < a) xs)
|
||||
in let bigger = quicksort (filter (\y. a < y) xs)
|
||||
in smaller ++ (a :: bigger)
|
||||
|
||||
head xs = case xs of
|
||||
Cons a _ => a
|
||||
descList : Int -> Int -> List Int
|
||||
descList from to = case to < from of
|
||||
False => Cons to (descList from (to - 1))
|
||||
True => Nil
|
||||
|
||||
main : Int
|
||||
main = head (quicksort (Cons 9 (Cons 8 (Cons 7 (Cons 6 (Cons 5 (Cons 4 (Cons 3 (Cons 2 (Cons 1 (Cons 0 Nil)))))))))))
|
||||
main = let list = (5 :: (2 :: (8 :: (9 :: (6 :: (0 :: (1 :: Nil)))))))
|
||||
in printStr (toStr (quicksort list))
|
||||
|
||||
{-
|
||||
|
||||
-- Program output --
|
||||
0125689
|
||||
In dispose
|
||||
Out dispose
|
||||
ExitSuccess
|
||||
|
||||
-}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue