PHP Program for Ceiling in a sorted array
Last Updated :
23 Jul, 2024
Given a sorted array and a value x, the ceiling of x is the smallest element in array greater than or equal to x, and the floor is the greatest element smaller than or equal to x. Assume than the array is sorted in non-decreasing order. Write efficient functions to find floor and ceiling of x.
Examples :
For example, let the input array be {1, 2, 8, 10, 10, 12, 19}
For x = 0: floor doesn't exist in array, ceil = 1
For x = 1: floor = 1, ceil = 1
For x = 5: floor = 2, ceil = 8
For x = 20: floor = 19, ceil doesn't exist in array
In below methods, we have implemented only ceiling search functions. Floor search can be implemented in the same way.
Method 1 (Linear Search)
Algorithm to search ceiling of x:
- If x is smaller than or equal to the first element in array then return 0(index of first element)
- Else Linearly search for an index i such that x lies between arr[i] and arr[i+1].
- If we do not find an index i in step 2, then return -1
Below is the implementation of the above approach:
PHP
<?php
// Function to get index of
// ceiling of x in arr[low..high]
function ceilSearch($arr, $low, $high, $x)
{
// If x is smaller than or equal
// to first element, then return
// the first element
if($x <= $arr[$low])
return $low;
// Otherwise, linearly search
// for ceil value
for($i = $low; $i < $high; $i++)
{
if($arr[$i] == $x)
return $i;
// if x lies between arr[i] and
// arr[i+1] including arr[i+1],
// then return arr[i+1]
if($arr[$i] < $x &&
$arr[$i + 1] >= $x)
return $i + 1;
}
// If we reach here then x is greater
// than the last element of the array,
// return -1 in this case
return -1;
}
// Driver Code
$arr = array(1, 2, 8, 10, 10, 12, 19);
$n = sizeof($arr);
$x = 3;
$index = ceilSearch($arr, 0, $n - 1, $x);
if($index == -1)
echo("Ceiling of " . $x .
" doesn't exist in array ");
else
echo("ceiling of " . $x . " is " .
$arr[$index]);
// This code is contributed by Ajit.
?>
Complexity Analysis:
- Time Complexity : O(n)
- Auxiliary Space: O(1)
As constant extra space is used.
Method 2 (Binary Search)
Instead of using linear search, binary search is used here to find out the index. Binary search reduces time complexity to O(Logn).
PHP
<?php
// PHP Program for Ceiling in
// a sorted array
// Function to get index of ceiling
// of x in arr[low..high]
function ceilSearch($arr, $low,
$high, $x)
{
$mid;
/* If x is smaller than or
equal to the first element,
then return the first element */
if($x <= $arr[$low])
return $low;
/* If x is greater than the
last element, then return
-1 */
if($x > $arr[$high])
return -1;
/* get the index of middle
element of arr[low..high] */
// low + (high - low)/2
$mid = ($low + $high)/2;
/* If x is same as middle element,
then return mid */
if($arr[$mid] == $x)
return $mid;
/* If x is greater than arr[mid],
then either arr[mid + 1] is
ceiling of x or ceiling lies
in arr[mid+1...high] */
else if($arr[$mid] < $x)
{
if($mid + 1 <= $high &&
$x <= $arr[$mid + 1])
return $mid + 1;
else
return ceilSearch($arr, $mid + 1,
$high, $x);
}
/* If x is smaller than arr[mid],
then either arr[mid] is ceiling
of x or ceiling lies in
arr[low....mid-1] */
else
{
if($mid - 1 >= $low &&
$x > $arr[$mid - 1])
return $mid;
else
return ceilSearch($arr, $low,
$mid - 1, $x);
}
}
// Driver Code
$arr = array(1, 2, 8, 10, 10, 12, 19);
$n = sizeof($arr);
$x = 20;
$index = ceilSearch($arr, 0, $n - 1, $x);
if($index == -1)
echo("Ceiling of $x doesn't exist in array ");
else
echo("ceiling of $x is");
echo(isset($arr[$index]));
// This code is contributed by nitin mittal.
?>
Output
Ceiling of 20 doesn't exist in array
Complexity Analysis:
- Time Complexity: O(Logn)
- Auxiliary Space: O(Logn)
The extra space is used in recursive call stack.
Related Articles:
Foor in a Sorted Array
Find floor and ceil in an unsorted array
Please write comments if you find any of the above codes/algorithms incorrect, or find better ways to solve the same problem, or want to share code for floor implementation.
Please refer complete article on Ceiling in a sorted array for more details!
Similar Reads
Ceiling in a sorted array Given a sorted array and a value x, find index of the ceiling of x. The ceiling of x is the smallest element in an array greater than or equal to x. Note: In case of multiple occurrences of ceiling of x, return the index of the first occurrence.Examples : Input: arr[] = [1, 2, 8, 10, 10, 12, 19], x
13 min read
PHP Program To Find Mean and Median of an Unsorted Array Given an unsorted array, the task is to find the mean (average) and median of the array in PHP. we will see the approach and code example to solve this problem. ApproachTo find the mean of an array, we need to sum up all the elements in the array and then divide the sum by the total number of elemen
2 min read
How to Check an Array is Sorted or Not in PHP? Given an array, the task is to check whether the given array is sorted or not. Arrays are often used to store and manipulate data. One common task is to check if an array is sorted in ascending or descending order. This article will explore different approaches to determine whether an array is sorte
3 min read
Sort an array of dates in PHP We are given an array of multiple dates in (Y-m-d) format. We have to write a program in PHP to sort all the dates in the array in decreasing order. Examples : Input : array("2018-06-04", "2014-06-08", "2018-06-05") Output : 2018-06-05 2018-06-04 2014-06-08 Input : array("2016-09-12", "2009-09-08",
2 min read
PHP Program for Merge Sort Merge sort is a popular sorting algorithm that employs a divide-and-conquer approach to sort an array in PHP. It divides the array into smaller subarrays, sorts each subarray, and then merges the sorted subarrays back together to form the final sorted array. How Does Merge Sort Work?Merge sort is a
3 min read
PHP program to find the maximum and the minimum in array Finding the maximum and minimum in an array involves determining the largest and smallest values within a given set of numbers. This task is crucial for analyzing data, identifying trends, or filtering outliers. Various methods, from simple traversal to optimized algorithms, can achieve this.Example
7 min read
Sort an Associative Array by Key in PHP Given an Associative Array, the task is to sort the associative array by its keys in PHP. There are different methods to sort Associative Array by keys, these are described below: Table of ContentUsing ksort() FunctionUsing uksort() FunctionConverting to a Regular Array for SortingUsing array_multis
3 min read
PHP Second most frequent element in an array Given an array we have to find the second most frequent element present in it. Examples: Input : array(3, 3, 4, 5, 5, 5, 9, 8, 8, 8, 8, 8); Output : Second most frequent element is: 5 Input : array("geeks", "for", "geeks"); Output : Second most frequent element is: for Here are some common approache
4 min read
ArrayObject uasort() Function in PHP The uasort() function of the ArrayObject class in PHP is used to sort values of an ArrayObject according to a user defined comparison function. The function compares and arranges the values present in the ArrayObject according to the given comparison function. This method does not affects the key-va
2 min read
PHP | ArrayIterator uasort() Function The ArrayIterator::uasort() function is an inbuilt function in PHP which is used to sort the element using a user-defined comparison function and maintain their index association. Syntax: void ArrayIterator::uasort( callable $cmp_function ) Parameters: This function accepts a single parameter $cmp_f
2 min read