I don't think you should use the "sort" function.
I just made a simple example. The resulting matrix "d" or "d2" is what you want. One solution uses a for-loop. It's easy to understand. The other uses histc() to avoid the for-loop (Thanks to Walter Roberson). You can then concatenate it to your original matrix.
a=[18.31,18.01,18.34,18.34,18.34,18.14,18.14,18.14]';
b=diff(a);
c=nan(size(b));
c(b>0)=1;
c(b<0)=0;
InitialBuy=1;
d=[InitialBuy;c];
Row_D=size(d,1);
d2=d;
for i=2:Row_D
if isnan(d(i)),d(i)=d(i-1);end
end
e=find(isnan(d2));
f=find(~isnan(d2));
g=[f;Row_D+1];
[vals, Didx] = histc(e,g);
Index=g(Didx);
d2(e)=d2(Index);
all(d==d2)
Best Answer