# Floor and ceil of an element in an array using C++

In this tutorial, we will learn how to find floor and ceil of an element in an array using C++? By Radib Kar Last updated : August 10, 2023

Here, we will be searching the floor and ceil of an element from an array. A ceil is the one that is the closest greater number from the array for the element. A floor is the one that is the closest lesser number from the array for the element.

We can solve this method with both linear & binary search.

## By using linear search

Initialize ceil with some largest integer (INT_MAX) & floor with some smallest integer (INT_MIN).

We can iterate through the array and check if the element is greater than the element & less than the current ceil value, we can update the ceiling value. Similarly, check if the element is lesser than the element & greater than the current floor value, we can update the floor value.

## By using binary search

While doing the normal binary search keep updating the current floor & ceil value with the pivot element (arr[mid]) as per possibility.

## C++ program to find floor and ceil of an array element

```#include <bits/stdc++.h>
using namespace std;

//print ceil & floor for the number
void ceilandfloorLinear(vector<int>& arr, int k)
{

cout << "..............Using linear search......\n";
//find the closest greater than number & closet lesser number
int _ceil = INT_MAX;
int _floor = INT_MIN;

for (int i = 0; i < arr.size(); i++) {
if (arr[i] > k && _ceil > arr[i])
_ceil = arr[i];

if (arr[i] < k && _floor < arr[i])
_floor = arr[i];
}

if (_ceil != INT_MAX)
cout << "ceiling of " << k << " is: " << _ceil << "\n";
else
cout << "There is no ceiling of " << k << "\n";

if (_floor != INT_MIN)
cout << "floor of " << k << " is: " << _floor << "\n";
else
cout << "There is no floor of " << k << "\n";
}

void ceilandfloorBinary(vector<int>& arr, int k)
{

cout << "..............Using binary search......\n";
//find the closest greater than number & closet lesser number
int _ceil = INT_MAX;
int _floor = INT_MIN;

sort(arr.begin(), arr.end());

int low = 0, high = arr.size() - 1;

while (low <= high) {
int mid = (high - low) / 2 + low;
if (arr[mid] == k) {
_ceil = k;
_floor = k;
break;
}
else if (arr[mid] > k) {
_ceil = arr[mid];
high = mid - 1;
}
else {
_floor = arr[mid];
low = mid + 1;
}
}

if (_ceil != INT_MAX)
cout << "ceiling of " << k << " is: " << _ceil << "\n";
else
cout << "There is no ceiling of " << k << "\n";

if (_floor != INT_MIN)
cout << "floor of " << k << " is: " << _floor << "\n";
else
cout << "There is no floor of " << k << "\n";
}

int main()
{
cout << "Enter number of elements\n";
int n;
cin >> n;
vector<int> arr(n);
cout << "Enter the elements\n";

for (int i = 0; i < n; i++)
cin >> arr[i];

cout << "Enter the number for which you need ceil & floor\n";
int k;
cin >> k;
//using linear search
ceilandfloorLinear(arr, k);
//using binary search
ceilandfloorBinary(arr, k);

return 0;
}
```

## Output

```Enter number of elements
7
Enter the elements
56
32
87
66
12
59
33
Enter the number for which you need ceil & floor
20
..............Using linear search......
ceiling of 20 is: 32
floor of 20 is: 12
..............Using binary search......
ceiling of 20 is: 32
floor of 20 is: 12
```