二分查找的前提是要求线性表为顺序存储结构
二分查找的基本思想:首先先定义要查找的数组最左边(left)和最右边(right)两个下标,在定义他们中间的下标(mid);
用a[mid]与要查找的数进行对比,如果a[mid]小于要查找的数,则将left=mid+1;如果a[mid]大于要查找的数,则将right=mid-1;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
int left, right;
int mid;
int acc;
left = 0;//定义数组最左边的下标
right = sizeof(a) / sizeof(a[0]) - 1;//定义数组最右边的下标,因为数组下标是从0开始,所以减一
printf("请输入你要查找的数;\n");
scanf("%d", &acc);
int flag = 0;
while (left <= right)//不一定是左右两个下标相等时找到
{
mid = left + (right - left) / 2;//一定要放在循环里面!!!
if (a[mid] < acc)
left = mid + 1;
else if (a[mid] > acc)
right = mid - 1;
else
{
printf("找到了,下标是:%d\n", mid);
flag = 1;
break;
}
}
if (flag == 0)
printf("找不到\n");
return 0;
}