Perl, 68 56 44
Like many other solutions, this uses the Fisher-Yates algorithm.
Using nutkinutki's comment, 12 characters are saved by using $_ instead of $i and performing the operations in the array indices.
44:
sub f{@_[$_,$j]=@_[$j=rand$_,--$_]for 1..@_}
56:
sub f{$i=@_;$j=int(rand$i),@_[$i,$j]=@_[$j,$i]while$i--}
This is my first codegolf.