c++实现二分搜索法

二分搜索法可以实现在一个升序的数组里快速查找一个数在这个数组里的位置,直接从代码讲解

#include<iostream>
#include<string>
using namespace std;

int search(int num[], int target,int length);//在前面声明一下这个函数

int main() {
	int num[] = { -1,0,3,5,9,12 };//一个升序的数组
	int target = 9;
	int length = sizeof(num) / sizeof(num[0]);//得到这个数组的长度,在二分查找时会用到
                                               //切记,使用sizeof的方法来得到数组的长度最好是在本段代码中使用,不要在用函数传递数组后,再在那个函数里用sizeof来求长度,这样得到的结果和我们预想的是不同的,因为传递过后的数组num会被当做指针来处理,64位系统中一个指针的长度就是8,所以sizeof(num)的结果是8,和我们预期的不一样。
	int ret = search(num, target,length);
	if (ret == -1) {
		cout << "数组里不存在这个数" << endl;
	}
	else {
		cout << num[ret] << endl;
	}
	system("pause");
	return 0;
}

int search(int num[], int target,int length) {
	int left = 0;//从数组的最左边开始
	int right = length - 1; //从数组的最右边的那个数开始,所以要-1
	int middle = (left + right) / 2; //取数组中间的数,这个数要用来和target对比来确定我们下一//次二分的范围
	while (left <= right) {    
		int middle = (left + right) / 2;
		if (num[middle] < target) { //如果中间的数小于target,说明target在这个数组的右边,那//么最右边的边界就可以不改变,要改变的是左边的边界,原本是0,以为middle已经小于target了,所以这//个时候我们在选择左边边界的时候就不包含middle了,所以left = middle + 1
			left = middle + 1;
		}
		else if (num[middle] > target) {//和上面同理
			right = middle - 1;
		}
		else {
			return middle;
		}
	}
	return -1;//找不到就返回-1

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ingα

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

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

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

打赏作者

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

抵扣说明:

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

余额充值