编程算法之数组二分查找法



查找数据,是每个程序员必备的技能,今天介绍一种在数组中快速查找的方法:二分查找法,


二分法在前面已经介绍过了,取一个数字的中间值,如果不对,再取。。 一直循环到最终的结果。


此方法比直接在for循环里面循环遍历话费时间要少的多。


下面介绍一种常见的二分查找法。

// 编程算法之数组二分查找法.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

int arrNum[1024];

int seachNum = 733;

int start = 0;
int end = 1023;

int middle;

int _tmain(int argc, _TCHAR* argv[])
{

	for (int i = 0; i < 1024; i++)
	{
		arrNum[i] = i;
	}

	while (start<end)
	{
		middle = (start+end)/2;
		if (seachNum ==arrNum[middle] )
		{
			printf("find it%d\n",middle);
			break;
		}
		else if (seachNum>arrNum[middle])
		{
			start = middle+1;
		}
		else
		{
			end = middle-1;
		}
		printf("start=%d midlle=%d end=%d\n",start ,middle,end);
	}

	
	return 0;
}


先定义一个数组。我们要查找的数字就在这个数组里面,再定义一个开始查找的节点跟结束查找的节点。

for循环里是给这个数组初始化。

while循环就是这个算法的核心了

首先给midlle赋值这个数组的中间值,然后跟查找的值对比,如果正好相等,那么跳出循环查找结束,如不相等,就会有两种情况 查找的值 大于中间值和小于中间值。

那么我们来分析如果查找值大于中间值会怎样, 大于中间值,说明我们的end值是没有错的,是start小,我们就给srart重新赋值为middle的下一个值,就是让它下次截取大的那一半。

如果查找值小于中间值,说明我们的start是没错的,end值选的太大,那么我们就给end重新赋值为middle的上一个。截取小的一半。


此算法我们8步就找到了733 是不是很节省时间呢?

注意:此算法适用于有序的数组排列。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值