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