编辑代码

#include <iostream>
using namespace std;
void printArray(int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}
int binarySearchFirstEqual(int searchKey, int array[], int arrLen) {
    int low = 0;
    int high = arrLen - 1;
    int keyPos = -1;

    while (low <= high) {
        int mid = low + ((high - low + 1) >> 1);
        if (array[mid] > searchKey) {
            high = mid - 1;
        }
        else if (array[mid] < searchKey) {
            low = mid + 1;
        }
        else {
            if (mid == 0 || array[mid - 1] != searchKey) {
                keyPos = mid;
                break;
            }
            else {
                high = mid - 1;
            }
        }
    }
    return keyPos;
}
int binarySearchLastEqual(int searchKey, int array[], int arrLen) {
    int low = 0;
    int high = arrLen - 1;
    int keyPos = -1;
    while (low <= high) {
        int mid = low + ((high - low + 1) >> 1);
        if (array[mid] > searchKey) {
            high = mid - 1;
        }
        else if (array[mid] < searchKey) {
            low = mid + 1;
        }
        else {
            if (mid == arrLen - 1 || array[mid + 1] != searchKey) {
                keyPos = mid;
                break;
            }
            else {
                low = mid + 1;
            }
        }
    }
    return keyPos;
}
int binarySearchFirstLargerEqual(int searchKey, int array[], int arrLen) {
    int low = 0;
    int high = arrLen - 1;
    int keyPos = -1;
    while (low <= high) {
        int mid = low + ((high - low + 1) >> 1);
        if (array[mid] >= searchKey) {
            if (mid == 0 || array[mid - 1] < searchKey) {
                keyPos = mid;
                break;
            }
            else {
                high = mid - 1;
            }

        }
        else {
            low = mid + 1;
        }
    }
    return keyPos;
}
int binarySearchLastSmallerEqual(int searchKey, int array[], int arrLen) {
    int low = 0;
    int high = arrLen - 1;
    int keyPos = -1;
    while (low <= high) {
        int mid = low + ((high - low + 1) >> 1);
        if (array[mid] <= searchKey) {
            if (mid == arrLen - 1 || array[mid + 1] > searchKey) {
                keyPos = mid;
                break;
            }
            else {
                low = mid + 1;
            }
        }
        else {
            high = mid - 1;
        }
    }
    return keyPos;
}
int main() {
    int array0[] = { 1, 1, 2, 3, 4, 5, 6 };
    int arrayLen = sizeof(array0) / sizeof(int);
    printArray(array0, arrayLen);
    cout << "第一个1出现的位置: " << binarySearchFirstEqual(1, array0, arrayLen) << endl;
    cout << "最后一个1出现的位置: " << binarySearchLastEqual(1, array0, arrayLen) << endl;
    cout << "第一个比1大的数: " << binarySearchFirstLargerEqual(1, array0, arrayLen) << endl;
    cout << "最后一个比1大的数: " << binarySearchLastSmallerEqual(1, array0, arrayLen) << endl;
}