📌  相关文章
📜  用于排序数组中的天花板的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:40:53.981000             🧑  作者: Mango

用于排序数组中的天花板的 C++ 程序

程序简介

这个 C++ 程序用于对一个升序数组中的天花板进行查找。天花板指的是数组中大于等于给定值的最小值。

例如,对于数组 [2, 3, 5, 8, 13, 18],给定值为 10,该程序将返回 13,因为它是大于等于 10 的最小值。

这个程序的时间复杂度是 O(log n),其中 n 是数组的长度。

程序实现

这个程序使用了二分查找的思想来查找天花板。

具体来说,算法维护两个指针 left 和 right,它们指向当前查找范围的左右边界。

初始时,left 指向数组的第一个元素,right 指向数组的最后一个元素。

接着,程序用中间元素 mid 更新 left 和 right 的值。如果 mid 大于等于给定值,说明天花板在 mid 左边或者就是 mid 本身,程序将 right 更新为 mid。如果 mid 小于给定值,说明天花板在 mid 右边,程序将 left 更新为 mid+1。

不断重复上面的过程,直到 left 和 right 相遇或者交错。这时,left 或者 right 指向的元素即为天花板。

以下是程序的代码片段:

int findCeiling(int arr[], int n, int target) {
    if (arr[n-1] < target) return -1; // 天花板比数组最大值还要大
    int left = 0, right = n-1, mid;
    while (left < right) {
        mid = left + (right - left)/2;
        if (arr[mid] < target) left = mid + 1;
        else right = mid;
    }
    return arr[left];
}
使用方法

使用这个程序非常简单。假设你已经有一个升序数组 arr 和一个要查找的天花板 target。

你只需要调用函数 findCeiling 来查找即可:

int ceiling = findCeiling(arr, n, target);

其中,n 是数组 arr 的长度。

如果天花板存在,程序将返回它的值;否则,程序将返回 -1。