二分

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

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;
}

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

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

Last updated