任务描述
本关任务:编写一个程序,能在数组中查找某个特定的数据元素。 与第一关不同的是,数组中的元素是从小到大有序存放的。
编程要求
根据提示,在右侧编辑器补充代码,能在数组中查找某个特定的数据元素,无论是否找到,都将返回数据比较的次数。 你的查找算法的复杂度要满足O(logn)
测试说明
平台会对你编写的代码进行测试:
测试输入:66 预期输出:1
测试输入:123 预期输出:3
测试输入:-90 预期输出:0
测试输入:900 预期输出:0
测试输入:189 预期输出:3
#include <stdio.h>
int find_pos(int data[] ,int n, int key)
{//在数组data中查找给定数据key,n是数组中数据元素的个数,返回值是数据元素比较的次数.
/*------------begin-----------------*/
int mid,start = 0,times=0;
int end = n - 1;
if(data[start]>key) return 0;
if(data[end]<key) return 0;
while(start <=end) {
times++;
mid = (start + end)/2;
if(data[mid] == key) break;
else if(data[mid] > key) end = mid - 1;
else start = mid + 1;
}
return times;
/*------------end-----------------*/
}
int main(void)
{
int a[]={-1,15,66,99,122,189};
int x;
scanf("%d",&x);
//此处填写代码,调用find_pos,在a数组中查找给定数据x的位置,并输出函数返回值
/*------------begin-----------------*/
printf("%d",find_pos(a,6,x));
/*------------end-----------------*/
return 1;
}