int binarySearchIteratively(int sortedArray[], int size, int value){
int left = 0;
int right = size - 1;
int mid;
while (left <= right){
//为了防止(left + right)溢出,所以先算(right - left),并用移位操作加速除以2的运算,注意">>"优先级很低
mid = left + ( (right - left) >> 1 );
if (sortedArray[mid] < value)
//数组sortedArray有序,[0, mid]范围内的数都比value小,搜索区间改为[mid + 1, right]
left = mid + 1;
else if (sortedArray[mid] > value)
//数组sortedArray有序,[mid, right]范围内的数都比value大,搜索区间改为[left, mid - 1]
right = mid - 1;
else
return mid;
}
return -1;
}
int binarySearchRecursively(int sortedArray[], int left, int right, int value){
if (left > right)
return - 1;
int mid = left + ( (right - left) >> 1 );
if (sortedArray[mid] < value)
return binarySearchValueRecursively(sortedArray, mid + 1, right, value);
else if (sortedArray[mid] > value)
return binarySearchValueRecursively(sortedArray, left, mid - 1, value);
else
return mid;
}
int binarySearchFirstValue(int sortedArray[], int size, int value){
int left = 0;
int right = size - 1;
int mid;
while (left <= right){
mid = left + ( (right - left) >> 1 );
if (sortedArray[mid] < value)
left = mid + 1;
else if (sortedArray[mid] > value)
right = mid - 1;
else {
if (mid == 0)
return 0;
if (sortedArray[mid - 1] != value)
return mid;
right = mid - 1;
}
}
return -1;
}
int binarySearchLastValue(int sortedArray[], int size, int value){
int left = 0;
int right = size - 1;
int mid;
while (left <= right){
mid = left + ( (right - left) >> 1 );
if (sortedArray[mid] < value)
left = mid + 1;
else if (sortedArray[mid] > value)
right = mid - 1;
else {
if (mid == size - 1)
return size - 1;
if (sortedArray[mid + 1] != value)
return mid;
left = mid + 1;
}
}
return -1;
}