Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Algorithms | Searching | Question 3

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given a sorted array of integers, what can be the minimum worst-case time complexity to find ceiling of a number x in given array? The ceiling of an element x is the smallest element present in array which is greater than or equal to x. Ceiling is not present if x is greater than the maximum element present in array. For example, if the given array is {12, 67, 90, 100, 300, 399} and x = 95, then the output should be 100.

(A)

O(loglogn)

(B)

O(n)

(C)

O(log(n))

(D)

O(log(n) * log(n))


Answer: (C)

Explanation:

We modify the standard binary search to find the ceiling. The time complexity T(n) can be written as T(n) <= T(n/2) + O(1) Solution of above recurrence can be obtained by Master Method. It falls in case 2 of the Master Method. The solution is O(Logn). 

C




#include <stdio.h>
 
/* Function to get index of ceiling of x in arr[low..high]*/
int ceilSearch(int arr[], int low, int high, int x)
{
    int 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]*/
    mid = (low + high) / 2; /* low + (high - low)/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[mid-1...high]
     */
    else {
        if (mid - 1 >= low && x > arr[mid - 1])
            return mid;
        else
            return ceilSearch(arr, low, mid - 1, x);
    }
}
 
/* Driver program to check above functions */
int main()
{
    int arr[] = { 1, 2, 8, 10, 10, 12, 19 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 20;
    int index = ceilSearch(arr, 0, n - 1, x);
    if (index == -1)
     printf(\"Ceiling of %d doesn\'t exist in array \", x);
   else
     printf(\"ceiling of %d is %d\", x, arr[index]);
   getchar();
   return 0;
}


Quiz of this Question
Please comment below if you find anything wrong in the above post


My Personal Notes arrow_drop_up
Last Updated : 28 Jun, 2021
Like Article
Save Article
Similar Reads