写一个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;
}