c++中,折半查找怎么去实现?

落日枪神 2012-11-11 01:04:41
用折半查找发确定一个已经按从大到小顺序排列好的数组中有没有这个数,
如果有则返回在数组中的位置,没有的话就给一个输出提示。
为什么我自己写的折半查找发有的数找不出来??

求哪位大哥给一个范例。
感激不尽!!!!
...全文
582 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangxun2007 2012-11-11
  • 打赏
  • 举报
回复
可以递归实现
jgwen 2012-11-11
  • 打赏
  • 举报
回复
多改改呗。可以发上来
转角天边 2012-11-11
  • 打赏
  • 举报
回复
你把你写的贴上来,大家来找茬
newtee 2012-11-11
  • 打赏
  • 举报
回复
#include<iostream.h>//C++二分法查找;C++折半查找;C++查找数组源程序[可直接运行,网址:www.ok2002.com]

#define size 5
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;
    }
}

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧