MATLAB Answers

"the variable assigned to a may be unused"

8 views (last 30 days)
Ghazal  Ramzan ali
Ghazal Ramzan ali on 5 Jan 2020
Commented: Image Analyst on 5 Jan 2020
Mattlab just returns the name of my function when i run it and the warning message that comes up currently says "the variable assigned to a may be unused" but im not sure what im doing wrong.
%the heap sort fuction
function sorted = heapsort(x)
%first we must build initial max-heap from x
%we need to find the length of the array
n = length(x);
%and create an initial max-heap with the given parameters of (array,
%length)
maxheap = buildmaxheap(x,n);
%initialise the array for the sorted elements
sorted = zeros(1,n);
% now the heapsort algorithm is as follows
for i = 1:n
k = n+1-i; %to find largest i in array
%put (n+1-i)th largest element in place
x = swap(x,1,k);
%adding final value to the sorted array
sorted(k) = maxheap(k);
%removing final value
maxheap(k) =[];
%create the next maxheap
n = n - 1;
maxheap = buildmaxheap(maxheap,i,n);
end
end
%the build max heap function
function maxheap = buildmaxheap(x,n)
a = x;
for i = floor(n/2):-1:1
%call heapify to make it sorted
a = maxheapify(a,i,n);
end
maxheap = a ;
end
%heapify function
function a = maxheapify(x,i,n)
%calculating the indicies of the child nodes
lhn = 2*i;
rhn = 2*i+1;
a = x;
%comparing left hand child node
if ((lhn <= n) && (a(lhn) > a(i))) %l<=n to check its not a leaf and a(l)>a(i) to find the biggest of the two
biggest = lhn;
else
biggest = i; %setting biggest found value to compare with rhn
end
%comparing right hand child node
if ((rhn <= n) && (a(rhn) > a(biggest))) %comparing rhn with biggest found previously
biggest = rhn;
end
%checking if it is complete
if biggest ~= i
%swap
a = swap(a,i,biggest);
%recursively call itself if its not finished
a = maxheapify(a,biggest,n);
end
a =x ;
end
function x = swap(x,i,j)
%swap elements i and j in vector(or this case array) x
val = x(i);
x(i) = x(j);
x(j) = val;
end

  0 Comments

Sign in to comment.

Answers (2)

dpb
dpb on 5 Jan 2020
In
%the build max heap function
function maxheap = buildmaxheap(x,n)
a = x;
for i = floor(n/2):-1:1
%call heapify to make it sorted
a = maxheapify(a,i,n);
end
maxheap = a ;
end
the x isn't used after the assign...I currently have lost access at least temporarily so can't test; not sure if that's what's generating the warning or not; you forgot to put the error message in full context of the calling code and the traceback so have to guess precisely where it was triggered.

  1 Comment

Ghazal  Ramzan ali
Ghazal Ramzan ali on 5 Jan 2020
im not sure what you mean, how would i resolve this?

Sign in to comment.


Image Analyst
Image Analyst on 5 Jan 2020
In this code:
if biggest ~= i
%swap
a = swap(a,i,biggest);
%recursively call itself if its not finished
a = maxheapify(a,biggest,n);
end
a =x ;
let's assume that the if criteria passes and you then execute an assignment to a:
a = maxheapify(a,biggest,n);
Well, as soon as that's finished, you go and assign x to a, overwriting the a you just created:
a =x ;
So the first assignment of the output of maxheapify() to a never gets used. It's assigned but immediately overwritten. So the warning (it's not an error) just notifies you of that situation in case that's not what you wanted.

  2 Comments

Ghazal  Ramzan ali
Ghazal Ramzan ali on 5 Jan 2020
Thank you so much, the code no longer has any error warnings however it still wont run and is saying there is an error on line 6 with n = length(x)?
Image Analyst
Image Analyst on 5 Jan 2020
What did you pass in to heapsort() for x? You didn't just click the green run triangle without giving anything for x did you?

Sign in to comment.

Sign in to answer this question.


Translated by