Help with MATLAB, creating a sorting function

  • #1
11
0
This is what I had originally

function out = msort(x)
%This function helps sort numbers in ascending and descending order.
%To put in descending order, user must include 'd' in the input.

y = length(x);
sorted = 0;
n = 0;

while ~sorted
sorted = 1;
for i = 1:y-1
if x(i) > x(i+1)
n = n + 1;
t = x(i);
x(i) = x(i+1);
x(i+1) = t;
sorted = 0;
end
end
end


% while ~sorted
% sorted = 1;
% for i = 1:y-1
% if x(i) < x(i+1)
% n = n + 1
% t = x(i);
% x(i) = x(i+1);
% x(i+1) = t;
% sorted = 0;
% end
% end
% end;

out = x;

The program works if i set x = to a set of numbers and run msort(x), it won't work if I do msort(10,9,5,4). It will work if I do msort([10,9,5,4]). I realized I have to use varargout and varargin which leads me to change the first line of the program to:

function [varargout] = msort(varargin)

but if I change that I am not sure how I would change the rest of the code with all the x's, and I'm also not sure how I would be able to show the number of swaps with the sorted numbers like

[b,n] = msort(10,9,5,4)

b = 4,5,9,10
n = 6 (number of swaps)

I didn't do the descending part of the program yet. Please help! Thanks
 
  • #2
There should be indentations there but it's not showing for some reason..
 
  • #3
function [varargout] = msort(varargin)
%This function helps sort numbers in ascending and descending order.
%To put in descending order, user must include 'd' in the input.



x = cell2mat(varargin);
y = nargin;
sorted = 0;
n = 0;



while ~sorted
sorted = 1;
for i = 1:y-1
if x(i) > x(i+1)
n = n + 1;
t = x(i);
x(i) = x(i+1);
x(i+1) = t;
sorted = 0;
end
end
end

% else
%
% while ~sorted
% sorted = 1;
% for i = 1:y-1
% if x(i) < x(i+1)
% n = n + 1
% t = x(i);
% x(i) = x(i+1);
% x(i+1) = t;
% sorted = 0;
% end
% end
% end
% end

if nargout > 2
disp('Too many output arguments.')
return
end

for i = 1:nargout
varargout{1} = x;
varargout{2} = n;
end

i got up to this now... I'm not sure how to allow the user to do descending

msort(1,2,3,4,5,'d')

? Error using ==> cell2mat
All contents of the input cell array must be of the same data type.

Error in ==> msort at 13
x = cell2mat(varargin);
 
  • #4
function [varargout] = msort(varargin)
Code:
%This function helps sort numbers in ascending and descending order.
%To put in descending order, user must include 'd' in the input.



x = cell2mat(varargin);
y = nargin;
sorted = 0;
n = 0;


    
    while ~sorted
        sorted = 1;
        for i = 1:y-1
            if x(i) > x(i+1)
                n = n + 1;
                t = x(i);
                x(i) = x(i+1);
                x(i+1) = t;
                sorted = 0;
            end
        end
    end

% else
%     
%     while ~sorted
%         sorted = 1;
%         for i = 1:y-1
%             if x(i) < x(i+1)
%                 n = n + 1
%                 t = x(i);
%                 x(i) = x(i+1);
%                 x(i+1) = t;
%                 sorted = 0;
%             end
%         end
%     end
% end

if nargout > 2
    disp('Too many output arguments.')
    return
end

for i = 1:nargout
    varargout{1} = x;
    varargout{2} = n;
end

i got up to this now... I'm not sure how to allow the user to do descending

msort(1,2,3,4,5,'d')

? Error using ==> cell2mat
All contents of the input cell array must be of the same data type.

Error in ==> msort at 13
x = cell2mat(varargin);

Use the
Code:
 tag for fixed width spacing.  It will make things much nicer for everyone.
 

Suggested for: Help with MATLAB, creating a sorting function

Replies
6
Views
717
Replies
4
Views
896
Replies
4
Views
474
Replies
1
Views
652
Replies
5
Views
1K
Replies
2
Views
781
Replies
2
Views
958
Back
Top