先介绍一下二分查找,如果我们需要在一个有序数数组种找到一个数字,那么就可以使用for次循环依次遍历数组,直到找到相应的数为止。那如果数组里面存放了上亿个数字呢,依次遍历查找是不现实的,这样做很浪费资源。所以就要使用其他方法,比如二分查找,它的原理是让第一个数的下标和最后一个数的下标相加再除以2得到数组中间的数的下标,让这个中间数与需要查找的数做对比,如果中间数小于需要查找的数,那么将中间的数的下标加1赋值给第一个元素的下标,然后此下标加上最后一个元素的下标除以2,如果中间数大于需要查找的数,那么将中间的数的下标减1赋值给最后一个元素的下标,然后此下标加上第一个元素的下标除以2,再与需要查找的数作比较,如果没找到,再执行该过程。 让我们用代码来实现它:
问题
二分查找
代码实现
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int mid = 0;//中间元素的下标
int type = 0;//判断是否为所找元素
int num = 0;
printf("输入需要查找的下标的元素:>");
scanf("%d", &num);
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] < num) {
left = mid + 1;
}
else if (arr[mid] > num) {
right = mid - 1;
}
else {
type = 1;
break;
}
}
if (type == 1) {
printf("ok了,下标是:%d\n", mid);
}
else {
printf("no\n");
}
return 0;
}