From a7a0c2924c68c7dc457debb60f44bffc4aa80682 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 15 Oct 2015 21:18:48 +1100 Subject: Added cocktail, insertion, strand sorts --- strandsort.hs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 strandsort.hs (limited to 'strandsort.hs') diff --git a/strandsort.hs b/strandsort.hs new file mode 100644 index 0000000..8226b79 --- /dev/null +++ b/strandsort.hs @@ -0,0 +1,25 @@ + + + +strandSort :: Ord a => [a] -> [a] +strandSort list = doStrandSort list [] [] [] + + + +doStrandSort :: Ord a => [a] -> [a] -> [a] -> [a] -> [a] +doStrandSort [] [] [] result = result +doStrandSort [] sublist unsorted result = doStrandSort unsorted [] [] (merge (reverse sublist) result) +doStrandSort input [] unsorted result = doStrandSort (tail input) [head input] unsorted result +doStrandSort input sublist unsorted result = + if (head input) >= (head sublist) + then doStrandSort (tail input) ((head input):sublist) unsorted result + else doStrandSort (tail input) sublist ((head input):unsorted) result + + + +merge :: Ord a => [a] -> [a] -> [a] +merge [] y = y +merge x [] = x +merge (x:xs) (y:ys) = if x <= y then x:(merge xs (y:ys)) else y:(merge (x:xs) ys) + + -- cgit