aboutsummaryrefslogtreecommitdiff
path: root/comparison/Haskell
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-05-02 09:49:01 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-05-02 09:49:01 +0900
commit8c7809d024e85d0a8acfb794a4db41b0e4bc13e6 (patch)
tree25ac81bad7be415d7cf75457275f7161d79f9f10 /comparison/Haskell
parent429543c748aaf81b2a4207318eb5a05259469b21 (diff)
downloadinpla-8c7809d024e85d0a8acfb794a4db41b0e4bc13e6.tar.gz
inpla-8c7809d024e85d0a8acfb794a4db41b0e4bc13e6.zip
v0.8.2-1
Diffstat (limited to '')
-rw-r--r--comparison/Haskell/Makefile7
-rw-r--r--comparison/Haskell/bsort-40000.hs1
-rw-r--r--comparison/Haskell/msort-260000.hs51
-rw-r--r--comparison/Haskell/qsort-260000.hs43
4 files changed, 98 insertions, 4 deletions
diff --git a/comparison/Haskell/Makefile b/comparison/Haskell/Makefile
index 0042c28..b55259f 100644
--- a/comparison/Haskell/Makefile
+++ b/comparison/Haskell/Makefile
@@ -1,8 +1,7 @@
CC = stack ghc
CFLAGS = -O2
BENCHMARK = bash ../tools/sptest_commands.sh
-TARGET = ack3-11 fib38 bsort-40000 isort-40000 qsort-800000 msort-800000
-#TARGET = ack3-11
+TARGET = ack3-11 fib38 bsort-40000 isort-40000 qsort-260000 msort-260000
LOG = log.txt
@@ -25,10 +24,10 @@ bsort-40000: bsort-40000.hs
isort-40000: isort-40000.hs
$(CC) -- $(CFLAGS) $<
-qsort-800000: qsort-800000.hs
+qsort-260000: qsort-260000.hs
$(CC) -- $(CFLAGS) $<
-msort-800000: msort-800000.hs
+msort-260000: msort-260000.hs
$(CC) -- $(CFLAGS) $<
diff --git a/comparison/Haskell/bsort-40000.hs b/comparison/Haskell/bsort-40000.hs
index 90f208c..c065a32 100644
--- a/comparison/Haskell/bsort-40000.hs
+++ b/comparison/Haskell/bsort-40000.hs
@@ -15,6 +15,7 @@ bs xs n = xs
go xs 0 = xs
go xs n = go (bs xs n) (n-1)
+bsort [] = []
bsort xs = go xs (length xs -1)
{-
diff --git a/comparison/Haskell/msort-260000.hs b/comparison/Haskell/msort-260000.hs
new file mode 100644
index 0000000..49cae3c
--- /dev/null
+++ b/comparison/Haskell/msort-260000.hs
@@ -0,0 +1,51 @@
+{-
+https://stackoverflow.com/questions/25839939/understanding-merge-sort-in-ml
+-}
+import System.Random
+
+mysplit [] = ([], [])
+mysplit [a] = ([a], [])
+mysplit (a:b:cs) = (a:m, b:n)
+ where
+ (m,n) = mysplit cs
+
+merge ([], ys) = ys
+merge (xs, []) = xs
+merge (x:xs, y:ys)
+ | x<y = x:merge(xs, y:ys)
+ | otherwise = y:merge(x:xs, ys)
+
+msort [] = []
+msort [a] = [a]
+msort [a,b]
+ | a<b = [a,b]
+ | otherwise = [b,a]
+msort xs = merge (msort m, msort n)
+ where
+ (m,n) = mysplit xs
+
+{-
+main = print $ msort [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 260000
+ let sorted = msort list
+ print (validation sorted)
diff --git a/comparison/Haskell/qsort-260000.hs b/comparison/Haskell/qsort-260000.hs
new file mode 100644
index 0000000..7115121
--- /dev/null
+++ b/comparison/Haskell/qsort-260000.hs
@@ -0,0 +1,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 260000
+ let sorted = qsort list
+ print (validation sorted)