0
$\begingroup$

Is there a function in MATLAB that sorts a bidimensional array?

This is how I would like to sort it:

The matrix:

$\left(\begin{array}{c c c} 9 & 4 & 7\\ 1 & 5 & 2\\ 3 & 6 & 8 \end{array}\right) $

will become:

$\left(\begin{array}{c c c} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{array}\right) $

1 Answers 1

4

It should be possible by vectorizing of the original matrix and subsequent reshaping

>> A = [9 4 7; 1 5 2; 3 6 8 ]

>> reshape(sort(A(:)),size(A))'

If you need to know original indices, function sort is able to return them. But it returns indices of vectorized matrix and therefore ind2sub has to be used

A = [9 4 7; 1 5 2; 3 6 8 ]; [t,indices]=sort(A(:)); [I,J] = ind2sub(size(A),indices); row_orig = reshape(I,size(A))'; col_orig = reshape(J,size(A))'; sorted = reshape(t,size(A))'; 
  • 0
    @nagaraj: I have converted your answer to a comment. Because you do not have 50 reputation points yet, [you can only comment on your own questions and answers](http://meta.stackexchange.com/questions/19756/how-do-comments-work/19757#19757). So, you didn't do anything wrong; the "add comment" button will only appear for you once you gain 50 points. Here is an [explanation of reputation points](http://meta.stackexchange.com/questions/7237/how-does-reputation-work/7238#7238).2011-08-11