Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Help with MATLAB, creating a sorting function

  1. May 9, 2008 #1
    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. jcsd
  3. May 9, 2008 #2
    There should be indentations there but it's not showing for some reason..
     
  4. May 9, 2008 #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);
     
  5. May 9, 2008 #4

    NateTG

    User Avatar
    Science Advisor
    Homework Helper

    Use the
    Code (Text):
     tag for fixed width spacing.  It will make things much nicer for everyone.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Help with MATLAB, creating a sorting function
Loading...