在一组“有序”数组中查找某个数字,如果找到返回其下表,如果没有找到,输出“不存在”。
一,遍历查找
就是将所有数都遍历一遍 找是否存在该数字如果存在返回下标
具体怎样做 看代码
//在一个有序数组中寻找某个数
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;//要查找的数
printf("请输入要查找的数>");
scanf("%d", &k);
for (int i = 0; i < 10; i++)
{
if (arr[i] == k)
{
printf("%d", i);
break;
}
}
return 0;
}
这样做很浪费时间,接下来我将介绍一种更快的方法
二,二分查找法
看见名字就知道 是怎么回事了 没错 就是将数组分为两段 进行查找
具体怎样实现的呢 咱们码上见分晓
//在一个有序数组中寻找某个数
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;//要查找的数
int flag = 0;//标记 如果没找到 为0 找到为1
printf("请输入要查找的数>");
scanf("%d", &k);
int L = 0, R = 10 - 1;//左右下标
int mid = 0;//计算中间值下标 这种写法防止中间值下标算的不准 因为int是有上限的
while (L <= R)
{
mid = L + (R - L) / 2;
if (arr[mid] < k)
{
L = mid + 1;
}
else if (arr[mid] > k)
{
R = mid - 1;
}
else if(arr[mid] == k)
{
flag = 1;
printf("找到了,下标为%d", mid);
break;
}
}
if (flag == 0)
{
printf("不存在\n");
}
return 0;
}
运行结果为这样
理解以上代码 对将来有好处
加油铁汁~