0001 function q = merge(p,x,y)
0002 % merge(p,x,y) --- form a partition from p by combining x and y's parts.
0003 % If x or y are out of range, p is returned.
0004
0005 q = p;
0006 n = nv(p);
0007
0008 if (x<1) | (x>n) | (y<1) | (y>n) | (x==y)
0009 return
0010 end
0011
0012 rx = find(p.array(:,x));
0013 ry = find(p.array(:,y));
0014
0015 if rx == ry
0016 return
0017 end
0018
0019 % merge row ry into row rx
0020 q.array(rx,:) = q.array(rx,:) | q.array(ry,:);
0021
0022 % remove row ry
0023
0024 idx = [1:ry-1,ry+1:np(p)];
0025 q.array = q.array(idx,:);
0026 q.array = sortrows(q.array);