Sorting a matrix from smallest to biggest left to right

13 Ansichten (letzte 30 Tage)
Vinny
Vinny am 15 Apr. 2016
Kommentiert: Vinny am 15 Apr. 2016
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.

Antworten (2)

Stephen23
Stephen23 am 15 Apr. 2016
Bearbeitet: Stephen23 am 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 Kommentar
Vinny
Vinny am 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.

Melden Sie sich an, um zu kommentieren.


Andrei Bobrov
Andrei Bobrov am 15 Apr. 2016
M = [4,7;5,8;6,9]
out = reshape(M,size(M,2),[])';
  1 Kommentar
Vinny
Vinny am 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?

Melden Sie sich an, um zu kommentieren.

Kategorien

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

Community Treasure Hunt

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

Start Hunting!

Translated by