编辑代码

#include <iostream>
using namespace std;
void printArray(int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}
int find_fist_value(int arr[], int len, int value) {

    int low = 0;
    int high = len - 1;

    while (low <= high) {
        int mid = low + ((high - low) >> 1);
        if (arr[mid] > value) {
            high = mid - 1;
        } else if (arr[mid] < value) {
            low = mid + 1;
        } else {
            if ((mid == 0) || (arr[mid - 1] != value)) {
                return mid;
            } else {
                high = mid - 1;
            }
        }
    }
    return -1;
}
int find_last_value(int arr[], int len, int value) {

    int low = 0;
    int high = len - 1;

    while (low <= high) {
        int mid = low + ((high - low) >> 1);
        if (arr[mid] > value) {
            high = mid - 1;
        } else if (arr[mid] < value) {
            low = mid + 1;
        } else {
            if ((mid == len - 1) || (arr[mid + 1] != value)) {
                return mid;
            } else {
                low = mid + 1;
            }
        }
    }
    return -1;
}
int find_the_fist_bigger_value(int arr[], int len, int value) {

    int low = 0;
    int high = len - 1;
    while (low <= high) {
        int mid = low + ((high - low) >> 1);
        if (arr[mid] > value) {
            if (mid == 0 || arr[mid - 1] <= value) {
                return mid;
            } else {
                high = mid - 1;
            }
        } else {
            low = mid + 1;
        }
    }

    return -1;
}
int find_the_last_smaller_value(int arr[], int len, int value) {

    int low = 0;
    int high = len - 1;
    while (low <= high) {
        int mid = low + ((high - low) >> 1);
        if (arr[mid] < value) {
            if (mid == len - 1 || arr[mid + 1] >= value) {
                return mid;
            } else {
                low = mid + 1;
            }
        } else {
            high = mid - 1;
        }
    }

    return -1;
}
int main() {
    int array0[] = {1,2,2,2,3,5,6};
    int arrayLen = sizeof(array0)/sizeof(int);
    printArray(array0, arrayLen);
    cout << "数组中第一个出现2的位置在:"<<find_fist_value(array0,arrayLen,2)<<endl;
    cout << "数组最后一个出现2的位置在: "<< find_last_value(array0,arrayLen,2) << endl;
    cout << "数组中第一个大于2的值的位置在:"<< find_the_fist_bigger_value(array0,arrayLen,2) << endl;
    cout << "数组中最后一个小于2的值的位置在:"<< find_the_last_smaller_value(array0,arrayLen,2) << endl;
	return 0;
}