题目要求:使用二分查找法,查找出第一个大于或等于某个数的下标
例如:int[]a = {1,2,2,2,4,8,10},查找2,返回第一个2的下标1,查找3返回4的下标4,查找4返回4的下标4,如果没有则返回-1.
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int a[] = {1,2,2,2,4,8,10}; //一个由小到大的数组
int b;
cout << "请输入一个数:" ;
scanf("%d",&b);
//printf("%d",b);
int high = 6; //数组的最高位
int low = 0; //数组的最低位
int ylow = 0; //用来保存原最低位
if(a[high] < b) //判断最大数是否小于输入的数,若是则返回-1
{
cout << "-1" << endl;
return 0;
}
while(low < high)
{
//low = (high + low)/2;
if(a[low] < b && low < high) //若低位的值小于输入的数,则将后部分继续二分
{
ylow = low;
low = (high + low)/2;
if(low <= ylow)
low++;
}
else //否则将前部分二分
{
//ylow = low;
high = low;
low = (high + ylow)/2;
if(low > ylow)
ylow = low;
else
break;
}
}
cout << high << endl;
return 0;
}