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

Learn moreOpportunities for recent engineering grads.

Apply Today
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?

*No products are associated with this question.*

Answer by Jan Simon on 6 Dec 2012

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

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.

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).

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

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.

## 2 Comments

Direct link to this comment:http://mathworks.com/matlabcentral/answers/55823#comment_115562

Lots of ideas on this at

http://en.wikipedia.org/wiki/Sorting_algorithm

Direct link to this comment:http://mathworks.com/matlabcentral/answers/55823#comment_115577

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