Matrix sorting, smallest to biggest
12 次查看(过去 30 天)
显示 更早的评论
So I need to sort a matrix from smallest to biggest going from left to right, with multiple rows. I was told in a previous thread about sort and reshape, which when I integrate into my loop work, but for this assignment I'm doing I can't use built in functions like that. I have to sort the function as part of a loop.
This loop sorts all my matrices but only from top to bottom.
It does stuff like this
1 4 7
2 5 8
3 6 9
I need it to do this
1 2 3
4 5 6
7 8 9
What do I need to add or change to make it go from left to right, like reading a book.
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
I can't just straight up use functions like this
out = reshape(a,size(a,2),[])';
I wish I could but that's not allowed for this.
Here are the 3 matrices I'm working 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]
Anything is appreciated. Thank you.
0 个评论
回答(2 个)
James Tursa
2016-4-15
编辑:James Tursa
2016-4-15
After your loop, add this line:
a = a';
The reason you are getting the result column-ordered instead of row-ordered is because MATLAB matrix memory is stored in column-order and linear indexing (which you are doing in a loop) will access the elements in that order. So a simple transpose at the end will change the result to row-ordered.
2 个评论
James Tursa
2016-4-15
Use Azzi's answer with your result. E.g., put this line after your loops:
a = reshape(a,fliplr(size(a)))';
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!