永发信息网

请各位看看这个C语言函数

答案:5  悬赏:70  手机版
解决时间 2021-02-23 07:15
  • 提问者网友:聂風
  • 2021-02-22 14:19
请各位看看这个C语言函数
最佳答案
  • 五星知识达人网友:行路难
  • 2021-02-22 15:41
如果你在在循环初始化的时候,初始化high=n,也就是采用的是左闭右开区间,而当满足v[mid] > x的条件是, x如果存在的话应该在[low, midd)区间中,但是这里却把high赋值为mid - 1了,这样,如果恰巧mid-1就是查找的元素,那么就会找不到这个元素。
二分查找不难,重点在于要搞清区间,否则可能会遗漏某些元素。追问可是代入数据后不对啊,直接if(xhigh=mid-1的话折半不是有分数并且少一个数追答先拿个奇数个举例吧 5个:1 2 3 4 5
我们要查2 首先mid=3是吧 然后2<3 往前找,这时候我们还用比3吗 不用了 mid-1 直接找到2了
再拿偶数个 6个 1 2 3 4 5 6
我们还是查2 首先mid=3.5 但int类型mid=3 我知道你的迷惑了 你以为有分数 int整形哪有分数的
全部回答
  • 1楼网友:神鬼未生
  • 2021-02-22 19:52
请问有什么问题吗
  • 2楼网友:不如潦草
  • 2021-02-22 18:57
二分法查找,具体你可以看一下算法解释
  • 3楼网友:街头电车
  • 2021-02-22 17:30
折半查找,当中间的数比查找的数x大时,high = mid -1意思是查找区间变成了[low,mid-1];当中间的数比查找的数x小时,low = mid -1意思是查找区间变成了[mid -1,high];
high = n-1意思是最后一个数,开始查找的区间是[0,n-1].
  • 4楼网友:山河有幸埋战骨
  • 2021-02-22 17:20
你这是折半查找吧,折半查找首先查找的数组必须是有序的,从小到大或者从大到小,然后定义两个标志,指向数组的第一个和最后一个元素,就是low和high,因为数组是从0开始的,所以low = 0,所以n个数的数组最后一位是n-1,所以high = n-1。折半的思路就是找出数组的中间元素v[mid]的值,与待查找数X比较,若X比mid小,说明X在low到mid-1这个区间,所以把high = mid -1,若是X=mid,则返回mid,找到,若X比mid大,说明X在mid+1到high这个区间,所以把low= mid+1,重复这个动作直到找到或者数组中不存在这个X追问可是代入数据后不对啊,应该是在“若X比mid小,说明X在low到MID这个区间”吧追答mid已经判断过要比X大了,所以区间变成mid - 1
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯