aboutsummaryrefslogtreecommitdiff
path: root/comparison/SML/isort-20000.sml
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-05-30 20:36:53 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-05-30 20:36:53 +0900
commite9db0870164cfec10aa219cc0898c30f6a888f53 (patch)
tree262150d7ad6abc6759f41a7adbb6dec4a7c90cb5 /comparison/SML/isort-20000.sml
parentbd540962efa674bb70dc9ada49393db54616dcbf (diff)
parente18b27f43ac23689822d4aaaaa3e8d550e41017a (diff)
downloadinpla-e9db0870164cfec10aa219cc0898c30f6a888f53.tar.gz
inpla-e9db0870164cfec10aa219cc0898c30f6a888f53.zip
Merge branch 'develop'
Diffstat (limited to 'comparison/SML/isort-20000.sml')
-rw-r--r--comparison/SML/isort-20000.sml35
1 files changed, 35 insertions, 0 deletions
diff --git a/comparison/SML/isort-20000.sml b/comparison/SML/isort-20000.sml
new file mode 100644
index 0000000..d3648cc
--- /dev/null
+++ b/comparison/SML/isort-20000.sml
@@ -0,0 +1,35 @@
+(* http://www.codecodex.com/wiki/Insertion_sort#Standard_ML *)
+fun insertsort [] = []
+ | insertsort (x::xs) =
+ let fun insert (x, []) = [x]
+ | insert (x, y::ys) =
+ if x<=y then x::y::ys
+ else y::insert(x, ys)
+ in insert(x, insertsort xs)
+ end;
+
+
+(* Creates a random list *)
+local
+ val nextInt = Random.randRange(1,10000);
+ val r = Random.rand(1,1);
+in
+ fun mkRandList 0 = []
+ | mkRandList n = (nextInt r)::(mkRandList (n-1))
+end;
+
+
+(* Validation checks *)
+fun validation [] = true
+ | validation (x::xs) =
+ let fun validation_cons x [] = true
+ | validation_cons x (y::ys) =
+ if x<=y then validation_cons y ys
+ else false
+ in
+ validation_cons x xs
+ end;
+
+
+(* Main *)
+validation(insertsort(mkRandList 20000));