二分查找法———(c语言)
简单讲解二分查找法查找数组下标:
首先,创建一个大小为10的数组,定义一个左下标,还有右下标,要查找的数字k,还有中间的下标
int a[] = { 1,2,3,4,5,6,7,8,9,10 };int left = 0;int right = sizeof(a) / sizeof(a[0]) - 1;int i,k=0,mid=0;
所谓二分法,就是不断细分。因此,我们需要用到循环来不断细分,最后达到最终目标。
当我们查找“8”这个数字时,给k赋值8。进入循环中,对左右下标不断细分,从而知道8所在的位置。
核心代码:
while (left <= right) {mid = (left + right) / 2;if (k>a[mid]) {left = mid + 1;}else if (k<a[mid]) {right = mid - 1;}else {break;}}if (left <= right) {printf("找到了!下标是:%d", mid);}else {printf("没找到!\n");}
图解:
第二次循环:
第n次循环:
整体思路就是这样子,通过对左右下标的移动,更新中间下标,得到要查找的下标,退出循环。
源代码:
#include<stdio.h>
int main(){int a[] = { 1,2,3,4,5,6,7,8,9,10 };int left = 0;int right = sizeof(a) / sizeof(a[0]) - 1;int i,k=0,mid=0;for (i = 0; i < sizeof(a) / sizeof(a[0]) - 1; i++) {printf("%d ", a[i]);}printf("\n请输入要查找的数字\n");scanf("%d", &k);while (left <= right) {mid = (left + right) / 2;if (k>a[mid]) {left = mid + 1;}else if (k<a[mid]) {right = mid - 1;}else {break;}}if (left <= right) {printf("找到了!下标是:%d", mid);}else {printf("没找到!\n");}return 0;
}//二分查找法
代码实现: