读书人

这是二分查找结果不对帮写写并注

发布时间: 2012-03-30 17:32:09 作者: rapoo

这是二分查找,结果不对,帮写写,并注释一下啊,搞不懂,搞了很久了
#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]

读书人网 >C++

热点推荐