forked from inpla/inpla
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqsort-800000.hs
More file actions
43 lines (33 loc) · 804 Bytes
/
Copy pathqsort-800000.hs
File metadata and controls
43 lines (33 loc) · 804 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{-
(* http://www.codecodex.com/wiki/Insertion_sort#Standard_ML *)
-}
import System.Random
qsort [] = []
qsort [x] = [x]
qsort (x:xs) = (qsort left) ++ [x] ++ (qsort right)
where (left, right) = part x xs
part pivot [] = ([], [])
part pivot (x:xs)
| x<pivot = (x:below, above)
| otherwise = (below, x:above)
where
(below, above) = part pivot xs
{-
main = print $ qsort [3,2,8,5]
-}
randomList :: Int -> IO([Int])
randomList 0 = return []
randomList n = do
r <- randomRIO (1,10000)
rs <- randomList (n-1)
return (r:rs)
validation [] = True
validation (x:xs) = validation_cons x xs
validation_cons x [] = True
validation_cons x (y:ys) =
if x<=y then validation_cons y ys
else False
main = do
list <- randomList 800000
let sorted = qsort list
print (validation sorted)