二分法查找

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

#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.二分法查找是基于一个已经排序的数组进行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云帆00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值