永发信息网

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

答案:3  悬赏:20  手机版
解决时间 2021-07-29 01:48
  • 提问者网友:ミ烙印ゝ
  • 2021-07-28 08:28
C#
最佳答案
  • 五星知识达人网友:过活
  • 2021-07-28 08:46

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;


全部回答
  • 1楼网友:雾月
  • 2021-07-28 11:59

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

这样效率很高的,呵呵。

  • 2楼网友:蓝房子
  • 2021-07-28 10:24

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这些都是需要你自己定义的顺序表中的

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯