int searchSeq3(SSTable ST,int key) {//在有序表ST中折半查找关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0 low=1;highj=ST.length; //置查找区间初值 while(low<=high) { mid=(low+high)/2; if(key==ST.R[mid].key) //找到待查元素 return mid; else if(key<ST.R[mid].key) high=mid-1; //继续在前一子表进行查找 else low=mid+1; //继续在后一子表进行查找 } return 0; //表中不存在待查元素 } 递归算法怎么写
时间: 2024-02-04 22:02:03 浏览: 89
C语言数据结构之 折半查找实例详解
5星 · 资源好评率100%
以下是折半查找算法的递归实现:
```c++
int binarySearchRecursion(SSTable ST, int key, int low, int high) {
if (low <= high) {
int mid = (low + high) / 2;
if (key == ST.R[mid].key) {
return mid;
} else if (key < ST.R[mid].key) {
return binarySearchRecursion(ST, key, low, mid - 1);
} else {
return binarySearchRecursion(ST, key, mid + 1, high);
}
}
return 0;
}
int searchSeq3(SSTable ST, int key) {
int low = 1, high = ST.length;
return binarySearchRecursion(ST, key, low, high);
}
```
这个递归实现与非递归实现的思路类似,只不过使用递归函数来实现查找。在每次递归中,我们计算中间元素的索引,然后根据中间元素与要查找的元素大小关系来选择递归查找左半边还是右半边。如果找到了要查找的元素,直接返回其索引,否则继续递归查找。
需要注意的是,递归实现需要传递查找区间的左右边界参数,因此我们需要在主函数中初始化左右边界,然后将它们作为参数传递给递归函数。
阅读全文