企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 天花板排列 > 原文: [https://www.geeksforgeeks.org/ceiling-in-a-sorted-array/](https://www.geeksforgeeks.org/ceiling-in-a-sorted-array/) 给定一个排序数组和一个值 x,x 的上限是数组中大于或等于 x 的最小元素,下限是小于或等于 x 的最大元素。 假设数组以非降序排序。 编写有效的函数以查找 x 的底和顶。 **示例**: ``` 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 ``` 在以下方法中,我们仅实现了上限搜索功能。 楼层搜索可以以相同的方式实现。 **方法 1(线性搜索)** 用于搜索 x 上限的算法: 1)如果 x 小于或等于数组中的第一个元素,则返回 0(第一个元素的索引)[ 2)其他线性搜索索引 i,以使 x 介于 arr [i]和 arr [i + 1]之间。 3)如果在步骤 2 中找不到索引 i,则返回-1 ## C++ ```cpp // C++ implementation of above approach #include <bits/stdc++.h> using namespace std; /* Function to get index of ceiling of x in arr[low..high] */ int ceilSearch(int arr[], int low, int high, int x)  {      int i;      /* 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*/ int main()  {      int arr[] = {1, 2, 8, 10, 10, 12, 19};      int n = sizeof(arr)/sizeof(arr[0]);      int x = 3;      int index = ceilSearch(arr, 0, n-1, x);      if(index == -1)          cout << "Ceiling of " << x << " doesn't exist in array ";      else         cout << "ceiling of " << x << " is " << arr[index];      return 0;  }  // This is code is contributed by rathbhupendra ```