Obligatory comment about how sorting algorithm speed is far more important when dealing with incredibly large datasets, spanning across multiple machines. Uninsightful (and perhaps glib) point about how Machines Are So Fast These Days that even Bubble Sort appears fast for medium-sized datasets.
Cleverly-worded comment about how Merge Sort is not the sort of sort to let you down in a jam, and how it is particularly suited to distributed computation (where the overhead of allocation is rendered meaningless by the I/O requirements).
http://hackage.haskell.org/package/vector-0.7.0.1
Mutability is attained by using the ST monad. The ST monad uses mutable memory, but since it does not allow other interactions with the outside world, its value can be extracted (unlike the IO monad). When you are done with the modification of the vector, it can be frozen to obtain a pure vector.
The IO monad can also be used, but not if you want to return a pure value.
A good tutorial can be found at:
http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector...
I used mutable vectors in the ST monad in maximum entropy training software, and they are really performant.
I was like, "Wait. Wait. Waaaiiiitt. How does it do that?"
It's still short and sweet ;).
I would be impressed if a sort which used the same 3 combined techniques could be faster.
(Of course, there might be better sorts, such as TimSort, but that's a change of algorithm, not language).
For an extreme example, the best way to write an efficient matrix multiplication in Fortran is to write a naive matrix multiplication. The compiler will recognize the pattern, and transform it.