将结构的字段排列成顺序

时间:2014-03-05 15:02:55

标签: arrays matlab sorting

我试图找到以结构形式排序多项式,以便指数字段按升序排列。我不想使用内置的排序功能来执行此操作。 例如多项式:

p = struct('exponent',{2,3,2,9},'coeff',{1,2,91,40})

表示多项式: p = 1(x ^ 2)+ 2(x ^ 3)+ 91(x ^ 2)+ 40(x ^ 9) 我想重新排列它以使它成为(指数现在按升序排列) p = 1(x ^ 2)+ 91(x ^ 2)+ 2(x ^ 3)+ 40(x ^ 9)

我的代码是:

function [ output ] = myMergepoly2( p )

h=1;
output(1,length(p))=struct('exponent',{},'coeff',{});
while (h<length(p))
    if p(1,h+1).exponent<p(1,h).exponent
        output(1,h).exponent = p(1,h+1).exponent;
        output(1,h).coeff = p(1,h+1).coeff;
        h=h+1;
    else
        output(1,h).exponent = p(1,h).exponent;
        output(1,h).coeff = p(1,h).coeff;
    end
end

end

然而,当我尝试运行此功能时,MATLAB遥控器已经忙碌了。写出没有错误消息。我不确定是什么导致了这个以及如何解决它,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

在循环的else部分,您不会增加h,所以它是这样的:

h=1 - &gt; if p(1,h+1).exponent<p(1,h).exponent是假的 - &gt;跳到其他循环并设置output(1,1).exponent - &gt; h=1(while循环继续)。

使用MATLAB内置排序我只是做了以下几点:

exponent = [p.exponent];
coeff = [p.coeff];
[exponent idx] = sort(exponent); 
output.exponent = exponent;
output.coeff = coeff(idx);

答案 1 :(得分:0)

替换此行:

output(1,length(p))=struct('exponent',{},'coeff',{});

这一行:

output = struct('exponent',cell(1,length(p)),'coeff',cell(1,length(p)));

也改为:

while (h<length(p))
    if p(1,h+1).exponent<p(1,h).exponent
        output(1,h).exponent = p(1,h+1).exponent;
        output(1,h).coeff = p(1,h+1).coeff;
    else
        output(1,h).exponent = p(1,h).exponent;
        output(1,h).coeff = p(1,h).coeff;
    end
    h=h+1;
end

但是我仍然没有得到正确的输出,我正在努力。