二分法查找有序表c语言,二分法查找 C++

满意答案

00e27ab806e4881f8254fe7ae8741834.png

fysh007

2016.04.11

00e27ab806e4881f8254fe7ae8741834.png

采纳率: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分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值