Hey guys. Im trying to write an algorithm for heapsort in Matlab. Its not working. The heap is constructing fine. Filling the sorted vector is not working. Here is the code and thank you!
function [xs,h]= heap(x)
N = length(x);
h = zeros(1,N);
N_h = 0;
for i=1:N
N_h = N_h +1;
child = N_h;
h(child) = x(i);
while child>1
parent = floor(child/2);
if h(child)>h(parent)
tmp = h(parent);
h(parent) = h(child);
h(child) = tmp;
child = parent;
else
break
end
end
end
xs = zeros(1,N);
parent = 1;
for i = N:-1:1
xs(i) = h(1);
h(1) = h(i);
child1 = 2*parent;
child2= 2*parent+1;
if child1 <= i-1
if h(child1)>h(child2)
cchild = child1;
else
cchild = child2;
end
if h(parent) < h(cchild)
tmp = h(parent);
h(parent) = h(child);
h(child) = tmp;
parent = child;
else
break
end
end
end