Python 2, 9486 bytes
from random import* L=inputdef S(L) :i=len(L) while i:i;exec"i-=1;j=randint(0,i);L[i],L[j]=L[j],L[i] print LL[i];"*i AThis is a function which shuffles the array in place without returning it, using a straightforward implementation of the Fisher-Yates shuffle. Getting random numbers from Python is expensive...
Takes input as a Python list, e.g. [1, 2, 3]. Thanks to @xnor and @colevk for the helptips.