在一个有序数组中查找具体的某个数字n,填写int binsearch(int x,int v[],int n);功能:在v[0]<=v[1]<=v[2]<=...<=v[n-1]的数组中查找x
1.遍历查找元素,需要查找n次
//遍历查找元素
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
int i = 0;
scanf_s("%d\n", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
for(i = 0; i < sz; i++)
{
if (k == arr[i])
{
printf("找到该数组中的元素,该元素的下标是:%d\n", i);
break;
}
}
if (i == sz)
printf("找不到该元素");
return 0;
}
2.二分法查找元素,可以简化查找
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //输入一组数组
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组中元素个数
int k = 7; //定义需要查找的元素
int left = 0; //数组元素中左侧第一个下标是0
int right = sz-1; //数组元素中右侧最后一个元素下标
int mid = 0; //定义一个数组中间元素下标
scanf_s("%d\n", &k);
while (left <= right) //只有左下标小于等于由下标时,判断条件成立,才能进入循环
{
//利用二分查找寻找需要查找的元素
mid = (left + right) / 2; //找到中间下标
if (arr[mid] > k) //判断当中间下标元素大于查找元素时
{
right = mid - 1; //调整右下标值为中间下标-1
}
else if (arr[mid] < k) //判断当中间下标元素小于查找元素时
{
left = mid + 1; //调整左下标值为中间下标+1
}
else
{
printf("找到该元素,该元素的下标是:%d\n", mid); //当上述条件执行后,系统就会判断最后一个元素与查询的元素是否相同
break;
}
}
if (left > right) //当while语句中的条件不成立时,系统应跳到最后一个判断条件,打印结果
{
printf("找不到该元素\n");
}
return 0;
}