排序数组 c++ 中的递归二叉搜索
Recursive binary search in sorted array c++
我必须编写一个递归函数来搜索排序数组。
#include <iostream>
using namespace std;
int find(int value, int* folge, int max) {
}
int main() {
int const n = 7;
int wert1 = 4, wert2 = 13, wert3 = 2, wert4 = 25;
int folge[n] = {3,4,9,13,13,17,22};
wert1 = find(wert1, folge, n);
}
这是提供给我们的代码部分,我们必须完成它。
如果您有 4 个可用变量,我知道该怎么做。(最小值和最大值(但是我只有三个,有没有办法编辑给定下一个函数的数组的起点?
假设你有你的四参数版本:
find(value, array, min, max);
使用三参数版本,您可以调用:
find(value, array + min, max);
请注意,数组的第max
个元素实际上是array + min
的第max-min
个元素,因此根据您的实现,您可能需要调用
find(value, array + min, max - min);
该函数可以按以下方式编写
#include <iostream>
int find( int value, int* folge, int max )
{
if ( max == 0 ) return -1;
int middle = max / 2;
if ( folge[middle] == value ) return middle;
bool lower = value < folge[middle];
int n = lower ? find( value, folge, middle )
: find( value, folge + middle + 1, max - middle - 1 );
return n != -1 && !lower ? n + middle + 1: n;
}
int main()
{
int const n = 7;
int wert1 = 4, wert2 = 13, wert3 = 2, wert4 = 25;
int folge[n] = {3,4,9,13,13,17,22};
std::cout << wert1 << " = " << find(wert1, folge, n) << std::endl;
std::cout << wert2 << " = " << find(wert2, folge, n) << std::endl;
std::cout << wert3 << " = " << find(wert3, folge, n) << std::endl;
std::cout << wert4 << " = " << find(wert4, folge, n) << std::endl;
return 0;
}
程序输出为
4 = 1
13 = 3
2 = -1
25 = -1
或再一个测试程序
#include <iostream>
int find( int value, int* folge, int max )
{
if ( max == 0 ) return -1;
int middle = max / 2;
if ( folge[middle] == value ) return middle;
bool lower = value < folge[middle];
int n = lower ? find( value, folge, middle )
: find( value, folge + middle + 1, max - middle - 1 );
return n != -1 && !lower ? n + middle + 1: n;
}
int main()
{
int const n = 7;
int folge[n] = {3,4,9,13,13,17,22};
for ( int x : { 2, 3, 4, 9, 13, 17, 22, 25 } )
{
std::cout << x << " -> " << find( x , folge, n ) << std::endl;
}
return 0;
}
它的输出是
2 -> -1
3 -> 0
4 -> 1
9 -> 2
13 -> 3
17 -> 5
22 -> 6
25 -> -1
find( &folge[1],...) // ignore first element
第 n 个元素的地址是一个大小为 n 的数组
如果folge
指向第一个元素,则folge+1
将指向第二个元素。
int find(int value, int* folge, int max)
{
int m = max/2;
if (0 == max)
{
return -1;
}
if (value == folge[m])
{
return value;
}
else if (value < folge[m])
{
return find(value, folge, m);
} else
{
return find(value, folge + m + 1, max - m - 1);
}
}
您可以更改 int 指针的值folge
int find(int value, int* folge, int max) {
if (max == 0) {
return -1;
}
int mid=max/2;
if (value == folge[mid])
{
return mid;
}
int base=0;
if (value < folge[mid])
{
max=mid-1;
}
else
{
max-=(mid+1);
base=mid+1;
}
int ret=find(value,folge+base,max);
if (ret == -1)
{
return -1;
}
return ret+base;
}
相关文章:
- 按边长度递归搜索图中所有可行路径
- 在递归二叉搜索树中搜索
- 递归二进制搜索与字符串数组
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 如何改进搜索二项式系数的递归算法
- 使用后序遍历递归的深度优先搜索会产生意外输出
- 字符串的递归二进制搜索-C++
- 递归搜索n元树中的元素
- 这是河内算法的递归塔是一种不知情的搜索
- 二叉搜索树按级别递归C++打印节点
- 了解一种神秘地起作用的递归二进制搜索算法
- 在 c++ 中递归搜索注册表
- 我在DFS搜索(树)代码中遇到麻烦.我如何打破递归
- 简单的二进制搜索树非递归添加功能
- 双链接列表通过递归搜索C
- 递归获取二进制搜索树的高度
- 使用 Bool 函数在 C++ 中进行递归二叉搜索
- VPATH 中的递归搜索
- 为什么这个计算二进制搜索树中节点的递归函数总是返回比预期更大的结果
- 使用递归在二进制搜索树中查找固定后继