Sorting a matrix from smallest to biggest left to right

27 views (last 30 days)
I made this code here for a matrix that was only 1 row. Now that I have matrices with multiple rows I don't know how to make it sort from left to right. Right now it sorts from top to bottom.
For example, the third matrix goes
4 7
5 8
6 9
I need it to go
4 5
6 7
8 9
m=numel(a);
for j=1:1:(m-1)
for i=1:1:(m-1)
if a(i)>a(i+1)
temp=a(i);
a(i)=a(i+1);
a(i+1)=temp;
end
end
end
These are some of the matrices I need to work with
a=[3 -2 1;4 0 5;1 2.2 -3]
a=[4 2 1;9 3 5]
a=[9 8;7 6;5 4]
Any help is appreciated. Thank you.

Answers (2)

Stephen23
Stephen23 on 15 Apr 2016
Edited: Stephen23 on 15 Apr 2016
The trick is to transpose, then use the columnwise element order:
>> M = [4,7;5,8;6,9]
M =
4 7
5 8
6 9
>> tmp = M.';
>> tmp(:) = sort(tmp(:));
>> out = tmp.'
out =
4 5
6 7
8 9
Basically what you are doing is simple, when you think in terms of columns, not rows.
  1 Comment
Vinny
Vinny on 15 Apr 2016
The only issue is I can't use built in functions like sort, so I need a way to have it do this in the loop.

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 15 Apr 2016
M = [4,7;5,8;6,9]
out = reshape(M,size(M,2),[])';
  1 Comment
Vinny
Vinny on 15 Apr 2016
I've integrated this into the loop and it works and gives me the matrix the way I want it.
for j=1:1:(m-1)
for i=1:1:(m-1)
if a(i)>a(i+1)
temp=a(i);
a(i)=a(i+1);
a(i+1)=temp;
out=reshape(a,size(a,2),[])';
end
end
end
But for this assignment I can't use built in functions like reshape. How can this be done as a loop?

Sign in to comment.

Categories

Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!