Sy_Faker 2020-03-24 15:44 采纳率: 25%
浏览 97
已采纳

尝试数据结构中的binsearch无反应

最近在学数据结构和算法,靠印象敲了里面的代码时:想模拟有序向量的查找,终端没反应,是时间太久还是没跳出循环?

#include<iostream>
using namespace std;
template <typename T>
int binsearch(T*A,T const &e,int low,int high)
{
    while(low<high)
    {
        int mi=(low+high)/2;
        (e<A[mi])?high=mi:low=mi;
    }
    return --low;
}
int main()
{
    int num[]={1,5,8,13,19,28,35,89,99,100};
    int k=13;
    cout<<binsearch(num,k,0,10)<<endl;
}
  • 写回答

2条回答 默认 最新

  • 世当珍惜 2020-03-24 22:00
    关注

    因为你的问题并不满足二分搜索的分治思想,分治思想需要保证每一步分治之后问题规模的缩小,
    在你的代码中,计算mid=(lo+hi)/2这一步时,如果mid的计算结果等于lo,并且A[mid]等于e时,那么问题的规模并不会缩小,而是会陷入死循环
    而实际上在正确的二分搜索中,不论A[mid]是否与e相等,问题的规模一定会缩小,并且子问题的结构必须要和父问题保持一致性

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)