二分

当数组中被查找的元素只有一个时:

int search(int *a, int t) //在长度为n的数组中查找t,
{
    int l = 1;
    int r = n;  
    while (l <= r) {    
        int middle = (l + r) / 2;
        if (a[middle] > t) {
            r = middle - 1; 
        }
        else if (a[middle] < t) {
            l = middle + 1; 
        }
        else {  
            return middle;
        }
    }
    return -1;
}

找大于等于给定数的第一个位置:

int search(int *a, int t) //找大于等于给定数的第一个位置
{
    int l = 1;
    int r = n;  
    while (l < r) { 
        int middle = (l + r) / 2;
        if (a[middle] >= t) {
            r = middle;
        }
        else
            l = middle + 1; 
    }
    return l;
}

找小于等于给定数的最后一个位置:

int search(int *a, int t) //找小于等于给定数的最后一个位置
{
    int l = 1;
    int r = n;  
    while (l < r) { 
        int middle = ceil((double)(l + r) / 2);
        if (a[middle] <= t) l = middle;
        else r = middle - 1;
    }
    return l;
}

Last updated