这是二分查找,结果不对,帮写写,并注释一下啊,搞不懂,搞了很久了
#include <iostream.h>
#define N 10
int binary(int, int *, int &);
int a[N]={2,4,5,7,8,9,11,15,16,17};
void main()
{
int location,key;
cin >> key;
int flag=true;
//if ((y=binary(x,a,i))==0)
binary(key,a,location);//i代表第几个元素
if(flag=true)
{ cout << key<<"Position is " << location;}
else {cout <<key<<"不是数组中的一个元素。";}
cout << endl;
}
int binary(int key, int *array, int &pos) //&pos是location的引用。
{
int left=0;
int right = N-1;
while (left<right)
{
int mid = (left+right)/2;
if (key < array[mid]) right = mid-1;
else if (key > array[mid]) left=mid+1;
else { pos=mid ; return 0;}
}
return -1;//找不到时
}
[解决办法]
- C/C++ code
#include<iostream.h>//C++二分法查找;C++折半查找;C++查找数组源程序#define size 5int main(){ //声明变量 int i,j; float t,a[size]; //从键盘上为数组赋值 for (i=0;i<size;i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } //使用冒泡排序法对数组按从小到大顺序排序 for (i=0;i<size-1;i++) for (j=i+1;j<size;j++) if (a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } //显示排序结果 for (i=0;i<size;i++) cout<<a[i]<<" "; cout<<endl; //输入要查找的数据 int value; int found; //找到为1,否则为0 int low,high,mid; for (i=1;i<=3;i++) { cout<<"value="; cin>>value; //二分法(又叫折半查找法)查找数组a found=0; low=0; high=size-1; while(low<=high) { mid=(high+low)/2; if (a[mid]==value) { found=1; break; } if (a[mid]<value) low=mid+1;//mid往右移动 else high=mid-1;//mid往左移动右逢源 } if (found)//fond的初始值为0,一旦找到,found变量被置1, //引发此条件语句,从而输出找到的结果,否则告知用户找不到。 cout<<"The valu found at:a["<<mid<<"]="<<a[mid]<<endl; else cout<<"The "<<value<<" is not found!"<<endl; }}
[解决办法]
code=C/C++]
#include <iostream.h>
#define N 10
int binary(int, int *, int &);
int a[N]={2,4,5,7,8,9,11,15,16,17};
void main()
{
int location,key;
cin >> key;
int flag;
//if ((y=binary(x,a,i))==0)
flag = binary(key,a,location);//flag应该是得到函数返回0或-1吧
if(flag == 0) //flag = true这样写法不对哦
{
cout << key<<"Position is " << location;
}
else
{
cout <<key<<"不是数组中的一个元素。";
}
cout << endl;
}
int binary(int key, int *array, int &pos) //&pos是location的引用。
{
int left=0;
int right = N-1;
while (left<=right) // 应该有left==right这种情况,你算一下就知道了。
{
int mid = (left+right)/2;
if (key < array[mid])
right = mid-1;
else if (key > array[mid])
left=mid+1;
else
{
pos=mid ;
return 0;
}
}
return -1;//找不到时
}
[/code]