Filter löschen
Filter löschen

How to do sort rows more efficiently.

3 Ansichten (letzte 30 Tage)
C Zeng
C Zeng am 28 Mai 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?
Thanks.

Akzeptierte Antwort

Jan
Jan am 28 Mai 2013
Bearbeitet: Jan am 28 Mai 2013
I cannot imagine that there is any easier method than sortrows:
x = randi(4, 8, 8);
y = sortrows(x);
[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);
end
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 Kommentar
C Zeng
C Zeng am 28 Mai 2013
Thanks, Jan! Let me think it over again.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by