怎样实现一个二分查找的代码?(干货!!!!详细!!!)

在这里插入图片描述

二分查找

二分搜索法是一个经典的例题,很多面试也会用到,可以用来减少对时间的消耗,更加高效的利用起来.

思路:

1.在规定的数组里面寻找出要找的数值对应得下标.
2.每次都从数组的中间开始查找,如果没找见,便删去一半
3.从剩下的一半重新开始进行二分查找,直到找到对应的数为止
4.如果数过大,则输出找不到即可.

题目:编写代码在一个整形有序数组中查找具体的某个数
如下面例题:

#include<stdio.h>
#include<stdlib.h>

int main(){

	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };      //定义一个顺序有9个值的数组
	int toFind = 9;                                 //所要求的数值
	int left = 0;                                   //最左边的下标
	int right = sizeof(arr) / sizeof(arr[0]) - 1;   //最右边的下标,sizeof来测量数组长度,right为最右侧数组长度
	while (left <= right){                          //运用循环语句,这个<=表示还有存在的值,如果是>,那就不可能存在值了.都没有长度了.

		int mid = (left + right) / 2;               //定义一个中间值,每次和要找的值进行比较,二分查找核心
		if (toFind < arr[mid]){                     //当要找的值比mid小

			right = mid - 1;                        //将区间缩减为mid之前的值,将mid-1的下标赋给right,使区间缩减.
		}
		else if (toFind>arr[mid]){                  //当要找的值比MID大

			left = mid + 1;                         //将mid+1的下标赋给left,使left变大,区间缩减.
		}
		else{

			printf("找到对应元素,下标为:%d\n", mid);  //当相等时即为找到所要找的元素,进行印刷
			break;
		}
	}
	if (left > right){                              //当>时,这个值是不存在的,也不存在这个区间

		printf("该元素不存在!\n");                    //故输出不存在即可
		system("pause");
		return 0;
	}
}

具体代码的实现方法我已经在后面进行了详细的注释,大家多看看就好了,加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值