以下为最简单的二分法查找算法:
#include <stdio.h>
#define NOTFOUND (-1)
int BinarySearch(int * nArray, int nNum, int len);
int main()
{
int nArray[] = {0, 1, 2, 3, 4, 5, 6, 8888};
int nRet = 0;
nRet = BinarySearch(nArray, 8888, sizeof(nArray));
if(nRet != -1)
printf("find the number : %d\n", nRet);
else
printf("not found!\n");
return 0;
}
int BinarySearch(int * nArray, int nNum, int nLen)
{
int nHigh, nMid , nLow = 0;
nHigh = nLen - 1;
while(nLow <= nHigh)
{
nMid = (nHigh + nLow) / 2;
if (nArray[nMid] > nNum)
nHigh = nMid + 1;
else if (nArray[nMid] < nNum)
nLow = nMid + 1;
else
return nArray[nMid];
}
return NOTFOUND;
}
二分法查找应该注意的几个点:
1.不要把下标和相对应的数弄混;
2.在比较的时候要注意是数组中间的跟要查找的数字相比,然后修改low和high其中一个边界值;
3.没有找到时,使用-1表示并不合适,因为有可能要查找的值是-1;
4.二分法查找是基于一个已经排序的数组进行。