3.设计一个高效算法int BinFind(int a[],int n):用于在一个递增整数有序序列a[0..n-1](所有元素均不相同)中,判断是否存在某一整数i,恰好存放在a[i]中
时间: 2024-03-22 08:38:29 浏览: 88
广东工业大学 anyview 数据结构 作业系统 第一章答案
以下是实现BinFind函数的高效算法:
```
int BinFind(int a[], int n) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == mid) {
return mid;
} else if (a[mid] < mid) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
该算法的时间复杂度为O(log n),其中n为序列的长度。具体实现如下:
1. 初始化left为0,right为n-1。
2. 在while循环中,计算mid的值为(left+right)/2。
3. 如果a[mid]等于mid,则表示找到了目标元素,返回mid。
4. 如果a[mid]小于mid,则说明目标元素在mid的右侧,将left更新为mid+1。
5. 如果a[mid]大于mid,则说明目标元素在mid的左侧,将right更新为mid-1。
6. 如果while循环结束,仍未找到目标元素,则返回-1表示未找到。
该算法的思路是利用二分查找的思想,每次将序列分成两半,判断中间元素是否为目标元素,如果不是,则根据目标元素与中间元素的大小关系,缩小搜索范围。最终可以在O(log n)的时间内找到目标元素。
阅读全文