编辑代码

#include<iostream>
#include<stdio.h>

using namespace std;

int search(int nums[], int size, int target) 
{
    int left = 0;
    int right = size - 1;	
    while (left <= right) {	
        int middle = left + ((right - left) / 2);
        if (nums[middle] > target) {
            right = middle - 1;	
        } 
		else if (nums[middle] < target) {
            left = middle + 1;	
        } 
		else {	
        	return middle;
        	}
    }
    return -1;
}

 void printArray(int array[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}

int search1(int nums[], int size, int target)//查找第一个值等于给定值的元素
{
	int left = 0;
    int right = size - 1;	
    while (left <= right) {	
        int middle = left + ((right - left) / 2);
        if (nums[middle] > target) {
            right = middle - 1;	
        } 
		else if (nums[middle] < target) {
            left = middle + 1;	
        } 
		else {	
			while(nums[middle-1]==target)
			{
				middle=middle-1;				
			}			
			return middle;
        	}
    }
    return -1;
}

int search2(int nums[], int size, int target)//查找最后一个值等于给定值的元素
{
	int left = 0;
    int right = size - 1;	
    while (left <= right) {	
        int middle = left + ((right - left) / 2);
        if (nums[middle] > target) {
            right = middle - 1;	
        } 
		else if (nums[middle] < target) {
            left = middle + 1;	
        } 
		else {	
			while(nums[middle+1]==target)
			{
				middle=middle+1;				
			}			
			return middle;
        	}
    }
    return -1;	
}

int search3(int nums[], int size, int target)//查找第一个大于等于给定值的元素
{
	int left = 0;
    int right = size - 1;
	int location;	
    while (left <= right) {	
        int middle = left + ((right - left) / 2);
        if (nums[middle] > target) {
        	location=middle;
            right = middle - 1;	
        } 
		else if (nums[middle] < target) {
            left = middle + 1;	
        } 
		else {	
			while(nums[middle-1]==target)
			{
				middle=middle-1;				
			}
        	return middle;
        	}
    }
	return location;
}

int search4(int nums[], int size, int target)//查找最后一个小于等于给定值的元素
{
	int left = 0;
    int right = size - 1;
	int location;	
    while (left <= right) {	
        int middle = left + ((right - left) / 2);
        if (nums[middle] > target) {
            right = middle - 1;	
        } 
		else if (nums[middle] < target) {
			location=middle;
            left = middle + 1;	
        } 
		else {	
			while(nums[middle-1]==target)
			{				
				middle=middle-1;				
			}
        	return middle;
        	}
    }
	return location;
}
int main() {
    int a[]={1,3,6,10,34,48,66,99,111,235};
	int arrLen=sizeof(a)/sizeof(int);
	printArray(a,arrLen);
	printf("目标元素6为第%d个元素\n\n",search(a,sizeof(a)/sizeof(int),6)+1);
	int b[]={1,2,3,3,54,66,82,99,3,112,234};
	printArray(b,sizeof(b)/sizeof(int));
	printf("第一个等于3为第%d个元素\n",search1(b,sizeof(b)/sizeof(int),3)+1);
	printf("最后一个等于3为第%d个元素\n\n",search2(b,sizeof(b)/sizeof(int),3)+6);
	int c[]={1,17,23,28,36,54,66,87,99,112,234};
	printArray(c,sizeof(c)/sizeof(int));
	printf("第一个大于等于30为第%d个元素\n",search3(c,sizeof(c)/sizeof(int),30)+1);
	printf("最后一个小于等于100为第%d个元素\n",search4(c,sizeof(c)/sizeof(int),100)+1);
}