MATLAB: Sort rows of a matrix based on a specific array

matrixsort

Hi everyone,
Let us assum Matrix A and array B as follows:
A = [1 0 1
2 0 0
4 0 0
3 1 1
6 0 0
5 0 0]
B = [3 4 1]
Array B always include values stored in the first column of Matrix A. So, I want to sort rows of Matrix A based on Array B. Whatever comes first in Array B must come first in Matrix A. Moreover, I do not want to change the position of any other rows in Matrix A that their values (first column) do not exist in Array B.
Having said this, sorted version of Matrix A based on Array B will be as follows:
An = [3 1 1
2 0 0
4 0 0
1 0 1
6 0 0
5 0 0]
Would you please guide me what is the fastest way to do this?
Regards,
Amir

Best Answer

>> [X,Y] = ismember(A(:,1),B);
>> [~,Z] = sort(Y(X));
>> T = A(X,:);
>> A(X,:) = T(Z,:)
A =
3 1 1
2 0 0
4 0 0
1 0 1
6 0 0
5 0 0