二分法查找 C++

来源:百度知道 编辑:UC知道 时间:2024/06/30 16:15:03
假设一维数组a[10]中的10个元素是按从小到大的顺序有序排列的,编写程序从a中二分查找出其值等于给定值x的元素,其中查找功能由函数实现。
int BinSearch(int R[10],int K,10)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=9,mid; //置当前查找区间上、下界的初值
while(low<=high)
{ //当前查找区间R[low..high]非空
mid=(low+high)/2;
if(R[mid]==K) return mid; //查找成功返回
else if(R[mid] >K)
high=mid-1; //继续在R[low..mid-1]中查找
else
low=mid+1; //继续在R[mid+1..high]中查找
}
return -1; //当low>high时表示查找区间为空,查找失败
} //BinSeareh

其他的部分该怎么写?高手指教了!

在VC6.0中运行通过。
》代码一:(在代码三中指出了您没注意到的一些问题)》》:
#include<iostream>
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<<result<<endl;
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] <K)
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<iostream>
usi