module Data.Tensort.Robustsort
( robustsortP,
robustsortB,
robustsortM,
robustsortRCustom,
robustsortRP,
robustsortRB,
robustsortRM,
)
where
import Data.Tensort.Subalgorithms.Bogosort (bogosort)
import Data.Tensort.Subalgorithms.Bubblesort (bubblesort)
import Data.Tensort.Subalgorithms.Magicsort (magicsort)
import Data.Tensort.Subalgorithms.Permutationsort (permutationsort)
import Data.Tensort.Subalgorithms.Rotationsort
( rotationsortAmbi,
rotationsortReverse,
rotationsortReverseAmbi,
)
import Data.Tensort.Subalgorithms.Supersort
( magicSuperStrat,
mundaneSuperStrat,
supersort,
)
import Data.Tensort.Tensort (tensort)
import Data.Tensort.Utils.LogNat (getLn, getLnBytesize)
import Data.Tensort.Utils.MkTsProps (mkTsProps)
import Data.Tensort.Utils.Types (SortAlg, Sortable (..))
robustsortRP :: Sortable -> Sortable
robustsortRP :: Sortable -> Sortable
robustsortRP = (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRCustom Sortable -> Sortable
robustsortP
robustsortP :: Sortable -> Sortable
robustsortP :: Sortable -> Sortable
robustsortP = TensortProps -> Sortable -> Sortable
tensort (Int -> (Sortable -> Sortable) -> TensortProps
mkTsProps Int
3 Sortable -> Sortable
supersortP)
supersortP :: Sortable -> Sortable
supersortP :: Sortable -> Sortable
supersortP =
(Sortable -> Sortable, Sortable -> Sortable, Sortable -> Sortable,
SupersortStrat)
-> Sortable -> Sortable
supersort
( Sortable -> Sortable
rotationsortReverse,
Sortable -> Sortable
bubblesort,
Sortable -> Sortable
permutationsort,
SupersortStrat
mundaneSuperStrat
)
robustsortRB :: Sortable -> Sortable
robustsortRB :: Sortable -> Sortable
robustsortRB = (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRCustom Sortable -> Sortable
robustsortB
robustsortB :: Sortable -> Sortable
robustsortB :: Sortable -> Sortable
robustsortB = TensortProps -> Sortable -> Sortable
tensort (Int -> (Sortable -> Sortable) -> TensortProps
mkTsProps Int
3 Sortable -> Sortable
supersortB)
supersortB :: Sortable -> Sortable
supersortB :: Sortable -> Sortable
supersortB =
(Sortable -> Sortable, Sortable -> Sortable, Sortable -> Sortable,
SupersortStrat)
-> Sortable -> Sortable
supersort
( Sortable -> Sortable
rotationsortReverse,
Sortable -> Sortable
bubblesort,
Sortable -> Sortable
bogosort,
SupersortStrat
mundaneSuperStrat
)
robustsortRM :: Sortable -> Sortable
robustsortRM :: Sortable -> Sortable
robustsortRM = (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRCustom Sortable -> Sortable
robustsortM
robustsortM :: Sortable -> Sortable
robustsortM :: Sortable -> Sortable
robustsortM = TensortProps -> Sortable -> Sortable
tensort (Int -> (Sortable -> Sortable) -> TensortProps
mkTsProps Int
3 Sortable -> Sortable
supersortM)
supersortM :: Sortable -> Sortable
supersortM :: Sortable -> Sortable
supersortM =
(Sortable -> Sortable, Sortable -> Sortable, Sortable -> Sortable,
SupersortStrat)
-> Sortable -> Sortable
supersort
( Sortable -> Sortable
rotationsortAmbi,
Sortable -> Sortable
rotationsortReverseAmbi,
Sortable -> Sortable
magicsort,
SupersortStrat
magicSuperStrat
)
robustsortRCustom :: SortAlg -> Sortable -> Sortable
robustsortRCustom :: (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRCustom Sortable -> Sortable
baseSortAlg Sortable
xs =
TensortProps -> Sortable -> Sortable
tensort
( Int -> (Sortable -> Sortable) -> TensortProps
mkTsProps
(Sortable -> Int
getLnBytesize Sortable
xs)
(Int -> (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRecursive (Sortable -> Int
getLnBytesize Sortable
xs) Sortable -> Sortable
baseSortAlg)
)
Sortable
xs
robustsortRecursive :: Int -> SortAlg -> SortAlg
robustsortRecursive :: Int -> (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRecursive Int
bytesize Sortable -> Sortable
baseSortAlg
| Int
bytesize Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
27 = Sortable -> Sortable
baseSortAlg
| Bool
otherwise =
TensortProps -> Sortable -> Sortable
tensort
( Int -> (Sortable -> Sortable) -> TensortProps
mkTsProps
(Int -> Int
getLn Int
bytesize)
(Int -> (Sortable -> Sortable) -> Sortable -> Sortable
robustsortRecursive (Int -> Int
getLn Int
bytesize) Sortable -> Sortable
baseSortAlg)
)