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? 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 output should be 100.

**(A)** O(LogLogn)

**(B)** O(n)

**(C)** O(Logn)

**(D)** O(Logn * Logn)

**Answer:** **(C)** **Explanation:** We modify standard binary search to find 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 Master Method. Solution is O(Logn).

#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

## Recommended Posts:

- Algorithms | Searching | Question 6
- Algorithms | Searching | Question 4
- Algorithms | NP Complete | Question 1
- Algorithms | Analysis of Algorithms | Question 1
- Algorithms | Sorting | Question 5
- Algorithms | Sorting | Question 4
- Algorithms | Sorting | Question 3
- Algorithms | Analysis of Algorithms (Recurrences) | Question 1
- Algorithms Quiz | Bit Algorithms | Question 4
- Algorithms Quiz | Sudo Placement [1.8] | Question 15
- Algorithms Quiz | Sudo Placement [1.8] | Question 14
- Algorithms Quiz | Sudo Placement [1.8] | Question 13
- Algorithms Quiz | Sudo Placement [1.8] | Question 12
- Algorithms Quiz | Sudo Placement [1.8] | Question 11
- Algorithms Quiz | Sudo Placement [1.8] | Question 10