An order N algorithm is provably random. Here's one a friend of mine coded up...

This is essentially the same shuffle algorithm that the STL uses. The problem is not in the shuffle algorithm, it's in random().

Peter