二分查找
二分搜索法是一个经典的例题,很多面试也会用到,可以用来减少对时间的消耗,更加高效的利用起来.
思路:
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;
}
}
具体代码的实现方法我已经在后面进行了详细的注释,大家多看看就好了,加油!