今天写了一下二分查找,发现真正写起来并没有自己以为的那么熟练。几经修改,总算写出来了,并且对照了《编程珠玑》中的实现。这只能算是入门级的写法,没有考虑输入序列中有多个相同的值都是查找结果返回最左或最右的问题。代码如下:
int BinarySearch(int *pDatas, int nLength, int nValue)
{
int left = 0;
int right = nLength - 1;
int middle;
while(left <= right)
{
middle = left + (right - left) / 2; //防止使用(left + right) / 2出现溢出
if(pDatas[middle] == nValue)
return middle;
else if(pDatas[middle] > nValue)
right = middle - 1;
else
left = middle + 1;
}
return -1;
}
这个代码实现无论在效率上还是在功能上都有进一步改进的空间,但是它非常便于理解,所以只能作为像我这样的初学者学习用。