把元素逆序表转换为对应的置换

来源:互联网 发布:java 支付宝支付 demo 编辑:程序博客网 时间:2024/05/22 04:49

function p=inversion2topermutation(I)
%INVERSION2TOPERMUTATION   把元素逆序表转换为对应的置换
%   p = inversion2topermutation( I )  输入元素逆序表I返回对应的置换p.
%算法的基本思想:先摆放大的元素,那么接着的小的元素摆放的位置就是其逆序数加1。

%$Author: WBC$     $Date: 2005/10/18$

n=length(I); %置换的长度
if any(I>(n-1:-1:0))
    error(['输入的元素逆序表 (' int2str(I(:)') ') 不合法']);
end

p=zeros(1,n);%初始化存储置换的向量
p(1)=n;  %初始化
iend=1;  %当前进入p的元素的个数
for i=n-1:-1:1
    v=I(i)+1;  % 当前i应该摆放在p中的位置
    iend=iend+1; % p的元素个数增1
    if v<=iend  %i摆放在p中间的某个位置
        p(v+1:iend)=p(v:iend-1);%该位置之后的元素后移一个单位
        p(v)=i; %该位置放上i
    else  %i摆放在p的最末位置
        p(iend)=i;
    end
end

原创粉丝点击