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