永发信息网

二分查找法,要求使用二分查找查处一个数在数组中的索引,如果不存在打印该数组的最后一个元素的下标,如果出现多次,打印下表最大的一个数

答案:3  悬赏:20  手机版
解决时间 2021-07-29 01:48
C#
最佳答案

int a[10001]; // 所在有序数组


int k; // 所找的数


int l,h,m;


l=1, h=len;


while(l<=h){


m=(l+h)/2; // 二分查找


if(a[m]==k){ // 找到,则往后找看是否还有与之相同的的。


int i;


for(i=m+1;i<=h;i++)if(a[i]!=k)break;


cout<<i-1<<endl; // 输出最后一个


return ;


}else


if(a[m]<k)


h=m-1; // 向前找


else


l=m+1; // 向后找


}


cout<<len<<endl; // 没有找到,输出最后一个元素下标


return;


全部回答

二分法查找仅对“顺序存储的有序数列”才有效的。基本算法:先取正中间一个数为KEY,然后把待查找值和这个KEY进行比较,确定待查找数在KEY的左边还是右边,,然后再从那一半中查找。

这样效率很高的,呵呵。

int low,high,mid; low=1 ; high=ST.length; while(low<=high){ mid=(low+high)/2; if (key==ST.elem[mid].key) return mid; else if(key<ST.elem[mid].key) high=mid-1; else low=mid+1; }

上面一段代码中的ST.elem[mid].key这些都是需要你自己定义的顺序表中的

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
梦想世界谁给我个极品水晶女妖
DNF加13疾射K5好,还是加10的血鹰好?说说PK
谁告诉下用手机怎么查Q币??
DNF广州一区50粉自动大概价格是多少?
设a属于R,解关于的不等式:x+a/x(ax-1)<0
摩托车驾照和牌照一共要多少钱?
古代汉语词典“与”的解释
在湖南隔十八年再生第二胎还需要再罚款吗?
湘潭县湘潭中国邮政储蓄银行24小时自助银行(
在QQ秀商城里,如果设计的作品受欢迎,有啥报
为什么在移动官网上关闭〖国内移动数据〗业务
如果往百度上传照片?
小虾怎么做才好?
济源市济源申记红焖羊肉地址在哪里啊
怎么样才能玩好QQ飞车?
推荐资讯
萨尔图区大庆TREK(崔克)自行车地址在哪里啊
传奇进去一次后进不去了?
爱我不爱我 是谁唱的?
包头哪有卖汽车门边开关的
铃兰怎么养?太原在那里可以买到?
卖家认证通过怎么扣款40元
谁有N79卡卡的主题。经典点的。
蔡甸区武汉经济技术开发区人民检察院怎么去啊
陕西省国土面积
进程怎么有应用程序桌面右下角怎么不显示
飞轮海在江苏台的一个娱乐节目
常宁市衡阳群贵家装这个地址在什么地方,我要
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?