满意答案
fysh007
2016.04.11
采纳率:40% 等级:12
已帮助:2951人
在VC6.0中运行通过。
》代码一:(在代码三中指出了您没注意到的一些问题)》》:
#include
using namespace std;
int main(void)
{
int BinSearch(int R[10],int K,int n);
int a[10],x,i,result;
for(i=0;i<10;i++)
cin>>a[i];
cin>>x;
result=BinSearch(a,x,10);
cout<
return 0;
}
int BinSearch(int R[10],int K,int n)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=n-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low<=high&&R[mid]!=K)
{ //当前查找区间R[low..high]非空
if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid]
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K) return mid; //查找成功返回
else return -1; //当low>high时表示查找区间为空,查找失败
}
其实如果是在10个数中查找的话,参数n完全没必要
》代码二:》》:
#include
using namespace std;
int main(void)
{
int BinSearch(int R[10],int K);
int a[10],x,i,result;
for(i=0;i<10;i++)
cin>>a[i];
cin>>x;
result=BinSearch(a,x);
cout<
return 0;
}
int BinSearch(int R[10],int K)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=10-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low<=high&&R[mid]!=K)
{ //当前查找区间R[low..high]非空
if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid]
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K) return mid; //查找成功返回
else return -1; //当low>high时表示查找区间为空,查找失败
}
》代码三:》》:
如果您想在若干个(也就是您输入的元素个数不固定)你输入的元素中查找一个数,可以加一个参数n,用它传递数组中元素的个数
#include
using namespace std;
int main(void)
{
int BinSearch(int R[10],int K,int n);//函数声明,如果定义在main函数之前,可以不要函数声明 具体参照参照xiang__198的代码
int a[100],x,i,result;
int num;
cout<
cin>>num;
cout<
for(i=0;i
cin>>a[i];
cout<
cin>>x;
result=BinSearch(a,x,num);//由于定义的函数要返回一个函数值,所以在主函数中要定义一个变量来接收这个返回值,数组元素做实参传递的是数组元素的首地址。故这里的调用写成result=BinSearch(a,x,num);,其中的a代表的是数组的首地址
cout<
cout<
return 0;
}
int BinSearch(int R[10],int K,int n)//不能写成int BinSearch(int R[10],int K,n),注意形参不能为一个常量int BinSearch(int R[10],int K,10) 也不对
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=n-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low<=high&&R[mid]!=K)//查找区间不为空时,如果查找到,则R[mid]!=K,结束循环,否则缩小查找空间继续查找,你的这里少了一个R[mid]!=K,所以即使查找到,也不会输出查找结果,因为形成了死循环
{ //当前查找区间R[low..high]非空
if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid]
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K)return mid; //查找成功返回
else return -1; //当low>high时表示查找区间为空,查找失败
}
对我的回答有疑问可以Hi我!恭候!
00分享举报