#Perl 6, 2828 25 bytes
{$^a.flat.sort.rotor($a[0]+.[0])}
This takes a list of lists (not arrays).
It works exactly like it looks. .rotor($a[0])
splits the given list into chunks of length $a[0]
, except $a[0]
in this case is a list, which when used in a numeric context evaluates to the length of the list, which is the width of the matrix in this case.