For me there is just no such thing as spare time any more - it's basically time when I should be doing something else. So when this popped up I thought it would be an ideal time to learn a bit of Haskell. I had a quick play at the time and had the "Oh! Haskell doesn't have mutable variables!" revelation (although I didn't know they were called mutable back then) had a bit more of a play with recursion, etc and then got busy with other stuff for, well, almost a year(!) until I 'found' time again:

-- Selection Sort in Haskell 
-- Cheating by using IORef for mutable variables since I don't know what I'm doing
-- with Haskell, although do have an inkling that the benefit of Haskell is that
-- all of below can be done in about three lines. 
-- Assumes integer input only.

import Data.IORef
import Data.List.Split  -- cabal install split 
                        -- I'm not even going to think about doing this myself.
                        -- Used to get a comma delimted string as a list

main = do 
    -- Set up 'variables'
    putStr "Enter List to Sort:"
    stringinput <- getLine
    let listinput = splitOn "," stringinput -- Convert comma delimited string to list
    let intinput = [ read x :: Int | x <- listinput]    --Convert list of strings to list of Integers
                                                        --Need to specify type
    unsortlistIO <- newIORef intinput
    elementIO <- newIORef []
    sortlistIO <- newIORef []
    sort unsortlistIO elementIO sortlistIO

sort unsortlistIO' elementIO' sortlistIO' = do
    unsortlist <- (readIORef unsortlistIO')
    sortlist <- (readIORef sortlistIO') -- initialise, for all intents and purposes
    --print unsortlist --debug
    if ((length unsortlist) > 0)
        then do -- Note to self: Must remember to ident these after if!

            -- find smallest element(s)
            unsortlist <- (readIORef unsortlistIO')
            writeIORef elementIO'  (filter (==(minimum unsortlist)) unsortlist)
            element <- readIORef elementIO'

            -- Add to sorted list
            sortlist <- readIORef sortlistIO'
            writeIORef sortlistIO' (sortlist++element)

            -- remove from original list
            writeIORef unsortlistIO' (filter (not.(==(minimum unsortlist))) unsortlist)

            readIORef sortlistIO'
            --print sortlist --debug
            sort unsortlistIO' elementIO' sortlistIO' -- loop. Ha!
        else return sortlist -- Note to self: must be careful about returning the right type of thing

Link to gist

I gather the benefit of Haskell is that this can actually be written in a couple of lines. Maybe in another eleven months time I'll have figured that out.