在有序数组里查找具体的某个数字
方法一:遍历
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int n = 0;
scanf_s("%d",&n);
int i = 0;
int flag = 0;
for (i = 0; i < 10; i++)
{
if (arr[i] == n)
{
printf("找到了,下标是:%d\n", i);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("找不到");
}
return 0;
}
这种办法优点是跟数组是否有序无关,因为一个个查找,但效率低下;
方法二:折半查找(或二分查找)
路人攀折半成荒,何似山中自在芳
折半查找的条件很苛刻,需要有序
在数组中查找某个数字需要计算数组的元素个数:sizeof(arr)/sizeof(arr[0])
{用数组的总大小除一个元素的大小等于数组的元素个数)
代码简单实现如下
#include<stdio.h>
int main()
{
int i = 0;
scanf_s("%d", &i);
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz-1;
int flag = 0;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < i)
left = mid + 1;
else if (arr[mid] > i)
right = mid - 1;
else
{
printf("找到了,下标是:%d\n", mid);
flag = 1;
break;
}
}
if (flag == 0)
printf("找不到\n");
return 0;
}
以上就是今日分享。