function [output]=selsort2(inputstruct)
% SELSORT2 selection sort with input and output structures
% implements selection sort algorithm 
% takes in and returns structures
% make sure the input is a 1-d array
USAGE='function [output]=selsort2(inputstruct)\ninput is a structure';

DEBUG=0;

if ~exist('inputstruct'),
   fprintf('%s\n',USAGE);
elseif ~isfield(inputstruct,'original_array'),
    fprintf('only 1-D numeric arrays are processed by selsort2\n');
    sorted=-1;
    return;
elseif isempty(inputstruct.original_array) | ~isnumeric(inputstruct.original_array) | min(size(inputstruct.original_array)) > 1,
    fprintf('only 1-D numeric arrays are processed by selsort2\n');
    sorted=-1;
    return;
end;

% determine array length

array_length=max(size(inputstruct.original_array));
input_array=inputstruct.original_array;
index=[1:array_length];

% sort the array

for x=1:array_length,
    min_loc=x;
    for y=x+1:array_length,
        if input_array(y)<input_array(min_loc),
            min_loc=y;
        end; % if
    end; % for y

    temp=input_array(x);
    input_array(x)=input_array(min_loc);
    input_array(min_loc)=temp;
    
    tmp_loc=index(x);
    index(x)=index(min_loc);
    index(min_loc)=tmp_loc;
    
    
   if DEBUG,
        fprintf('x=%d, min_loc=%d\n',x,min_loc);
        fprintf('%d ',input_array);fprintf('\n');
        fprintf('%d ',index);fprintf('\n');
    end; % debugging code

    
end;  % for x

% create output structure
output=inputstruct;
output.sorted=input_array;
output.index=index;


% switch to descending order if called for

if isfield(inputstruct,'sort_order'),
   if ~isempty(inputstruct.sort_order) & isnumeric(inputstruct.sort_order) & inputstruct.sort_order==0,
      output.sorted=output.sorted(array_length:-1:1);  % reverse order
      output.index=output.index(array_length:-1:1);  % reverse order
   end;
end;