二分法查找

来源:互联网 发布:ubuntu超级用户权限 编辑:程序博客网 时间:2024/06/13 21:39

以下为最简单的二分法查找算法:

#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);elseprintf("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;elsereturn nArray[nMid];}return NOTFOUND;}


二分法查找应该注意的几个点:

1.不要把下标和相对应的数弄混;

2.在比较的时候要注意是数组中间的跟要查找的数字相比,然后修改low和high其中一个边界值;

3.没有找到时,使用-1表示并不合适,因为有可能要查找的值是-1;

4.二分法查找是基于一个已经排序的数组进行。

原创粉丝点击