$arr[$mid2]) { // Key is in the right section, between $mid2 and $high. return ternarySearchByRecursion($arr, $key, $mid2 + 1, $high); } else { // Key is in the middle section, between $mid1 and $mid2. return ternarySearchByRecursion($arr, $key, $mid1 + 1, $mid2 - 1); } } function ternarySearchIterative($arr, $key) { // Initialize low and high pointers. $low = 0; $high = count($arr) - 1; // Continue searching while the high pointer is greater than or equal to the low pointer. while ($high >= $low) { // Calculate the first and second midpoints. $mid1 = floor($low + ($high - $low) / 3); $mid2 = floor($high - ($high - $low) / 3); // Check if the key is found at either midpoint. if ($arr[$mid1] === $key) { return $mid1; } if ($arr[$mid2] === $key) { return $mid2; } // Determine the section to continue the search in. if ($key < $arr[$mid1]) { // Key is in the left section, update the high pointer. $high = $mid1 - 1; } elseif ($key > $arr[$mid2]) { // Key is in the right section, update the low pointer. $low = $mid2 + 1; } else { // Key is in the middle section, update both pointers. $low = $mid1 + 1; $high = $mid2 - 1; } } // Key was not found. return null; }