首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这是二分查找,结果不对,帮写写,并注释一下啊搞不懂,搞了很久了解决方法

2012-03-30 
这是二分查找,结果不对,帮写写,并注释一下啊,搞不懂,搞了很久了#include iostream.h#define N 10int bin

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

热点排行