apartition :: Ord a => STArray s Int a -> Int -> Int -> ST s Int
apartition axs p q = do
x <- readArray axs p
let loop i j
| i > j = do swap axs p j
return j
| otherwise = do u <- readArray axs i
if u < x
then do loop (i + 1) j
else do swap axs i j
loop i (j â 1)
loop (p + 1) q
apartition :: Ord a => STArray s Int a -> Int -> Int -> ST s Int
apartition axs p q = do
x <- readArray axs p
let loop i j
| i > j = do swap axs p j
return j
| otherwise = do u <- readArray axs i
if u < x
then do loop (i + 1) j
else do swap axs i j
loop i (j - 1)
loop (p + 1) q