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

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

how can i sort a matrix (all rows and columns are sorted) without using any special function like "sort"?

Asked by Zaza on 5 Dec 2012

i guess it has to do something with "min" and "max" functions...

for example:

A = [2 3 4 5; 6 9 1 5]; %%% "A" can be of any size %%%
%%% B = sorted A %%%
min(A) = [2 3 1 5]; %%% 1st unsorted row of B %%%
max(A) = [6 9 4 5]; %%% 2nd unsorted row of B %%%

now i've to sort the rows...

any idea?

2 Comments

Babak on 5 Dec 2012

Matrix A you are providing only has 1 row. How can B have more than 1 row?

Zaza

Products

No products are associated with this question.

3 Answers

Answer by Jan Simon on 6 Dec 2012

This is a perfect question for an internet research:

http://lmgtfy.com/?q=sort+algorithm

or

http://lmgtfy.com/?q=sort+algorithm+matlab

0 Comments

Jan Simon
Answer by Babak on 6 Dec 2012
Edited by Babak on 6 Dec 2012

If you don't want to use sort() then you can write your own sorting algorithm. Like this one (untested):

 function B = mysortfunc(A)
  if size(A,1)*size(A,2)~=length(A)
    errordlg('enter a vector');
    return
  end
  if size(A,2)~=1
    A=A';
  end
 rem_A = A;
 for j=1:length(A)
  [value,index] = min(rem_A);
  B(j) = value;
 if index>1
   A1 = rem_A(1:index-1);
 else
   A1=[];
 end
 if index<length(rem_A)
   A2 = rem_A(index+1:end);
 else
   A2 = [];
 end
 rem_A = [A1 , A2]
 end

3 Comments

Jan Simon on 7 Dec 2012

A simplification of your method with pre-allocation:

function B = mysortfunc(A)
A = A(:);
B = zeros(1, numel(A));
for ii = 1:numel(A)
  [value, index] = min(A);
  B(ii)    = value;
  A(index) = NaN;
end

However, the scientists have developped much better sorting methods in the last 1000 years. I do not assume that a teacher would be happy to see such a brute-force approach. Therefore I dare to publish this, although it solves a homework question, because submitting it as "solution" is a bad idea.

José-Luis on 7 Dec 2012

1000 years? Babbage would be impressed...

Jan Simon on 9 Dec 2012

I'm convinced, that even the scroll of parchment in the Egypt libraries have been sorted with smarter methods 5000 years ago, but I cannot find any resources to prove this.

The optimal sorting machine is still the SFL (spaghetti fork lifter): Cut spaghetti noodles according to the values to be sorted. Lift them up and push them against a wall. The processing time does not depend on the number of elements and even the pre-processing is only O(n).

Babak
Answer by Pritesh Shah on 7 Dec 2012

Simple Solution A = [2 3 4 5; 6 9 1 5]

A =

     2     3     4     5
     6     9     1     5

>> sort(min(A))

ans =

     1     2     3     5

1 Comment

John Petersen on 7 Dec 2012

You used 'sort' which he specifically requested not to be used, and he also specified that A could be any size.

Pritesh Shah

Contact us