Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

How to do sort rows more efficiently.

Asked by C Zeng

C Zeng (view profile)

on 28 May 2013

Hi, all!

I plan to sort rows to an numerical matrix. First sort them in descending order based on first column, then if there is a tie, sort those in the tie in descending order on second column, and so on(if tie sort on the next column).

Generally, it is possible to do this kinder of sorting but I notice "sortrows" command and it can sort rows based on which column. But is there a easier way to do my algorithm described above?



C Zeng

C Zeng (view profile)



No products are associated with this question.

1 Answer

Answer by Jan Simon

Jan Simon (view profile)

on 28 May 2013
Edited by Jan Simon

Jan Simon (view profile)

on 28 May 2013
Accepted answer

I cannot imagine that there is any easier method than sortrows:

x = randi(4, 8, 8);
y = sortrows(x);

For more performance see:


[EDITED] For large arrays like randi(4, 1e5, 10) this is about 10% faster than sortrows:

function [y, index] = leanSortRows(x)
[v, index] = sort(x(:, n));          %#ok<ASGLU>
for k = n-1:-1:1
   [v, index2] = sort(x(index, k));  %#ok<ASGLU>
   index       = index(index2);
y = x(index, :);

This is similar to the fallback for backward sorting. The MEX-function sortrows.c, which called for standard cases uses the quicksort algorithm of the C-libs, which are obviously slower than Matlab's built-in SORT.

1 Comment

C Zeng

C Zeng (view profile)

on 28 May 2013

Thanks, Jan! Let me think it over again.

Jan Simon

Jan Simon (view profile)

Contact us