如何写一个MATLAB函数模拟sortrows函数

写一个MATLAB函数模拟sortrows,但不使用sortrows函数。函数输出参数是排序结果数组。函数有两个输入参数,参数A为待排序的数组,参数Keys为排序关键字列号数组。Keys的第1个元素为第1个排序关键字,最后一个元素为级别最低的排序关键字,如果列号是正数,则升序排列,如果列号为负数,则该列降序排列。程序有帮助文档、参数检查、有效性检查、错误处理。

如有帮助,请采纳!

%%---------------------------------帮助文档-------------------------------
% function func主要是实现sortrows的功能,也就是对输入矩阵进行按列排序,根据Keys数组对各列进行特定的排序
% 比如Keys元素的值为负数,那么就对该列进行降序排序,否则就是升序
% 返回值是一个根据Keys要求排序好的数组

%%
clear all
clc

% 假如A是一个6*6的魔方矩阵
A = magic(6);
% 第1,2,6列升序排序,其余降序排序
Keys = [1,2,-3,-4,-5,-6];
% 测试结果
sort_A = func(A,Keys)

function sort_A = func(A,Keys)
    
    [n,m ]= size(A);
    sort_A = zeros(n,m);
    nums = 1:m;
    % 对输入参数有效性进行检查
    % 错误直接return,不再继续执行
    if m ~= length(Keys)|| ~isequal(nums,abs(Keys))
        disp('输入的Keys有误!');
        return;
    end
    % Keys的元素大于0升序,小于0降序
    for i=1:m
        val = Keys(i);
        if val<0
            sort_A(:,i) = sort(A(:,i),'descend');
        else 
            sort_A(:,i) = sort(A(:,i),'ascend');
        end
    end
    
end

重写个函数,把sortrow函数的代码粘进去改改……


函数声明
Matrix sortrows(Matrix& a,int col=0);
函数定义
Matrix Matlab2c::sortrows(Matrix& a,int col)
{
    Matrix sorttemp=a.subMatrix(col);
    sorttemp = Matlab2c::sort(sorttemp);
    Matrix flag(a.row,1,0.0);  //记录当前行是否已被占用
    Matrix p(a.row,a.column);
    for (int i=0;i<a.row;i++)   //排序列排序前的遍历
        for(int ii=0;ii<sorttemp.row;ii++)   //排序列排序后的遍历
            if (a(i,col)==sorttemp(ii) && flag(ii)==0)
            {
                flag(ii)=1;
                for (int t = 0; t < a.column; t++)
                    p(ii,t)=a(i,t);   //将第i行布置到第ii行
                break;
            }
    return p;
}