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

怎样实现一个二分查找的代码?(干货!!!!详细!!!)_第1张图片

二分查找

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

思路:

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;
	}
}

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

你可能感兴趣的:(C语言基础,c语言)