c++的采用递归方式实现二分查找。帮我看看哪里出错了,谢谢!!
原题:题目:采用递归方式实现二分查找要求完成本题的填空并上机调试通过,理解递归调用的执行过程//实验5_3:sy5_3.cpp#include<iostream>usin...
原题:
题目:采用递归方式实现二分查找
要求完成本题的填空并上机调试通过,理解递归调用的执行过程
//实验5_3:sy5_3.cpp
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key, 0, NUM-1); /*调用二分查找函数进行查找*/
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search(int value[], int key, int low, int high)
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low) /2 ; /*求中间位置*/
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 );
我的答案是:
int search(int value[], int key, int low, int high)
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low) /2 ; /*求中间位置*/
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 )
万分感谢!!!!!
!!!!!修改一下那个题目:
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key, 0, NUM-1); /*调用二分查找函数进行查找*/
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search( (1) )
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=( (2) ) /*求中间位置*/
if (value[mid]==key) ( (3) )/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( (4) );
}
ps:输入的数由【大】到【小】
一共要填四个空,其他的不能改动。 展开
题目:采用递归方式实现二分查找
要求完成本题的填空并上机调试通过,理解递归调用的执行过程
//实验5_3:sy5_3.cpp
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key, 0, NUM-1); /*调用二分查找函数进行查找*/
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search(int value[], int key, int low, int high)
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low) /2 ; /*求中间位置*/
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 );
我的答案是:
int search(int value[], int key, int low, int high)
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low) /2 ; /*求中间位置*/
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( value, key, high, mid+1 )
万分感谢!!!!!
!!!!!修改一下那个题目:
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key, 0, NUM-1); /*调用二分查找函数进行查找*/
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search( (1) )
{ int mid;
if (low>high)return -1; /*查找区间为空*/
mid=( (2) ) /*求中间位置*/
if (value[mid]==key) ( (3) )/*得到查找的数据位置*/
if(key<value[mid])return search(value, key, low, mid-1); /*在下半区查找*/
else return ( (4) );
}
ps:输入的数由【大】到【小】
一共要填四个空,其他的不能改动。 展开
3个回答
展开全部
#include <iostream>
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key,0, NUM-1); /*调用二分查找函数进行查找*/
//cout<<result;
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search(int value[], int key, int low, int high)
{
int mid=0;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low)/2 ; /*求中间位置*/
//cout<<mid<<endl;
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value,key,mid+1,high); /*在下半区查找*/
else return search(value, key, low,mid-1);
}
多谢你的问题,让我复习了一下
using namespace std;
#define NUM 10
int search(int value[], int key, int low, int high);
void main()
{
int value[NUM], result, key;
int i;
cout<<"请输入十个从大到小的有序数列:"<<endl;
for (i=0; i<NUM; i++)
cin>>value[i]; /* 输入从大到小的有序数列*/
cout<<"请输入其中一个元素值:"<<endl;
cin>>key; /* 输入待查找的数值*/
result=search(value, key,0, NUM-1); /*调用二分查找函数进行查找*/
//cout<<result;
if(result!=-1)
cout<<"第"<<result<<"个元素是:"<<key<<endl;
else
cout<<"不能找到"<<key<<endl;
}
int search(int value[], int key, int low, int high)
{
int mid=0;
if (low>high)return -1; /*查找区间为空*/
mid=(high+low)/2 ; /*求中间位置*/
//cout<<mid<<endl;
if (value[mid]==key) return mid;/*得到查找的数据位置*/
if(key<value[mid])return search(value,key,mid+1,high); /*在下半区查找*/
else return search(value, key, low,mid-1);
}
多谢你的问题,让我复习了一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)int value[],int key,int low,int high
(2)(low+high)/2
(3)return mid
(4)那儿貌似有点问题,既然数组是从大到小的顺序,应该这样才对
if(key<value[mid])return search(value, key, mid+1, high);
else return search(value,key,low,mid-1);
(2)(low+high)/2
(3)return mid
(4)那儿貌似有点问题,既然数组是从大到小的顺序,应该这样才对
if(key<value[mid])return search(value, key, mid+1, high);
else return search(value,key,low,mid-1);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询