binary_search_first 查找第一个目标
binary_search_last 查找最后一个目标
函数返回元素下标,如果找不到则返回-1
#include <stdio.h>
int binary_search_first(int array[], int size, int target)
{
int start, mid, end, index;
if (NULL == array || size <= 0)
{
return -1;
}
start = 0;
end = size;
index = -1;
while (start < end)
{
mid = (start + end) / 2;
if (array[mid] >= target)
{
end = mid;
if (array[mid] == target)
{
index = mid;
}
}
else
{
start = mid + 1;
}
}
return index;
}
int binary_search_last(int array[], int size, int target)
{
int start, mid, end, index;
if (NULL == array || size <= 0)
{
return -1;
}
start = 0;
end = size;
index = -1;
while (start < end)
{
mid = (start + end) / 2;
if (array[mid] <= target)
{
start = mid + 1;
if (array[mid] == target)
{
index = mid;
}
}
else
{
end = mid;
}
}
return index;
}
int main(void)
{
int array[] = {1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4};
printf("first index = %d\n", binary_search_first(array, sizeof(array) / sizeof(array[0]), 2));
printf("last index = %d\n", binary_search_last(array, sizeof(array) / sizeof(array[0]), 2));
return 0;
}