折半查找算很简单的小算法了,但是真是写起来,有时候会感觉上下边界问题比较模糊。
#include <stdio.h>
int binary_search(int key, int *data, int len)
{
int start = 0;
int end = len - 1;
int middle = 0;
if (data == NULL || key < data[start] || key > data[end])
{
return -1;
}
while (start <= end)
{
middle = (start + end) / 2;
if (key == data[middle])
{
return middle;
}
else if (key > data[middle])
{
start = middle + 1;
}
else
{
end = middle - 1;
}
}
return -1;
}
int main()
{
int data[] = {5, 9, 10, 15, 23};
int key = 24;
printf("location = %d\n", binary_search(key, data, 5));
return 0;
}