Is there something that confuses you in the description of the ternary search algorithm?
no i do understand it but my problem is the syntax it self since i never used matlab, i thought if someone could help
thats my code
function [numComparisons, returnindex ] = ternarySearch( array, target, firstIndex , lastIndex)
numComparisons = 0;
lastIndex = length(array);
firstIndex = 1;
mid1 = firstIndex + (lastIndex - 1);
mid2 = lastIndex - (lastIndex - 1);
xmid1 = 0;
xmid2 = 0;
if(array(mid1)== target)
xmid1 = mid1;
elseif(array(mid2) == target)
xmid2 = mid2;
elseif(target < array(mid1))
ternarySearch(mid2+1,lastIndex, target);
else
ternarySearch(mid1+1,mid2-1,target);
end
end
been a while since I’ve used matlab, but it’s definitely harder to read unformatted
If you put the code between triple backticks (a line of three of these: `, then the code, then a line with 3 of those symbols again) it’ll be much easier for us to read
sorry about that
the error is that any search target always 0 which means that algorithm isnt working
function [numComparisons, returnindex ] = ternarySearch( array, target, firstIndex , lastIndex)
numComparisons = 0;
lastIndex = length(array);
firstIndex = 1;
mid1 = firstIndex + (lastIndex - 1) / 3;
mid2 = lastIndex - (lastIndex - 1)/ 3;
xmid1 = 0;
xmid2 = 0;
if(array(mid1)== target)
xmid1 = mid1;
elseif(array(mid2) == target)
xmid2 = mid2;
elseif(target > array(mid1))
ternarySearch(mid2+1,lastIndex, target);
elseif(target < array(mid1))
ternarySearch(firstIndex,mid1 - 1, target);
else
ternarySearch(mid1+1,mid2-1,target);
end
end
This function you’ve defined is a little odd, you’ve defined a function with 4 parameters, then only used 3 of them later on
You also declare two output parameters then don’t seem to assign to them, is that intentional? (probably not, I’m guessing)
Edit: you do assign to one of them, numComparisons
, so the function returns what you’ve set it to, which is 0
Edit2: forgot to mention, you set the values of firstIndex
and lastIndex
immediately inside the function, you don’t want to do that, you should just get them from the function parameters
as i mention it’s only the syntax that is a bit weird for me, would you help me to rewrite it please?
the only param i need is the number of comparisons so i can use it in a graph later on
The syntax looks almost fine, not got matlab installed to check for definitely, it’s the actual code that’s wrong
To return values from a function you assign to your declared output parameters, which you’ve not been doing
You’ve declared a function, ternarySearch
which takes in 4 parameters, array
, target
, firstIndex
and lastIndex
You immediately wipe out the values of firstIndex
and lastIndex
(don’t do this if you’re intending to do the recursive calls)
You then call this function (wrongly) with only 3 parameters, e.g. ternarySearch(mid2+1,lastIndex, target);
You’re missing something here
Also you’re not returning anything useful
To return useful values from a function, you assign to the variables you’ve declared as output parameters (in this case numComparisons
and returnIndex
)
Don’t forget to get those values out of the ternarySearch
calls you make inside ternarySearch
too, e.g. [numComparions, returnIndex] = ternarySearch(array, target, newLeftIndex, newRightIndex);
or whatever you name the new indices to search with