本题要求实现一个函数,该函数采用二分查找法从一个已经升序排序的数组中,查找某个数k。如果找到k, 输出k所在的数组下标(0~n-1)及比较次数。若k不存在,输出-1和比较次数。 函数接口定义: int Search(int *p, int n, int k,int *Count); void Sort(int *,int n); 其中 p为数组首地址,n为数组长度,k为待查找的数, *Count为比较次数。 函数返回值:如果k在数组中返回其下标值,没找到返回-1。
时间: 2023-11-28 14:47:09 浏览: 187
二分查找函数
5星 · 资源好评率100%
下面是一个二分查找的实现代码:
```
int Search(int *p, int n, int k, int *Count){
int low = 0, high = n - 1, mid;
*Count = 0; // 比较次数初始化为0
while(low <= high){
mid = (low + high) / 2;
*Count = *Count + 1; // 记录比较次数
if(p[mid] == k){
return mid; // 找到了,返回下标值
}
else if(p[mid] > k){
high = mid - 1; // 在左半部分查找
}
else{
low = mid + 1; // 在右半部分查找
}
}
return -1; // 没有找到,返回-1
}
```
这里的思路是每次取数组中间的数mid与待查找的数k进行比较,如果mid等于k,则找到了,返回其下标值;如果mid大于k,则在数组左半部分查找;如果mid小于k,则在数组右半部分查找。每次比较次数加1,最后返回比较次数和查找结果。
阅读全文