vectorising while loop insertion sort matlab -
array = [2 1 3 2 1] = 2:length(array) value = array(i); j = - 1; array_j=array(1:j); array_j_indices=cumsum(array_j>value); [~,n]=find(array_j_indices==1); newarray=array; array(n+1:i)=array_j(array_j>value); j=j-max(array_j_indices); array(j+1) = value; end %forloop disp(array);
hello, saw code vectorising while loop insertion code cannot seem understand how works. how cumsum(array_j>value)
work? understand , tested cumsum functions can't seem understand how rational operator of (array_j>value)
works in within cumsum function under loop.
also, dont understand how [~,n]=find(array_j_indices==1)
stores value matrix of n. store in columns because there not (~) in rows?
cumsum(array_j>value)
?
array_j>value
: due sorted nature of array_j
, result zeros followed ones, e.g. [0 0 0 0 1 1 1 1]
cumsum(array_j>value) = [0 0 0 0 1 2 3 4]
: @ 1 element equal 1
.
[~,n]=find(array_j_indices==1);
?
because there 1 row, equal n=find(array_j_indices==1);
.
fastest implementation?
note 'vectorised' code slower following (easier) implementation:
for = 2:length(array) value = array(i); j = - 1; n=find(array(1:j)>value,1); array(n+1:i)=array(n:j); array(n) = value; end
and slower built-in matlab sort
method.
Comments
Post a Comment