4 回答
TA贡献1836条经验 获得超3个赞
这就是返回5啊,不然要返回什么……
5是指target的引索值,英文叫index。程序里value为1,2,3,4,5,8,8,8 它的引索值是 0,1,2,3,4,5,6,7,8.
你的这段程序就是用二分法在value里面找target,输出target的引索值。由于target=8,所以找到了第一个8,他的引索是5,所以输出5.
仔细看看,可以带值进去看。
刚开始start=0, end=8-1=7. 由于start小于end,所以执行循环,mid=(0+7)/2=3,因为mid是int型,所以只保留整数部分。
那么data[3]应该就是value里面第4个数,也就是4。那么4<8,所以start=mid+1=3+1=4. 第一次循环结束,由于start4<end7,所以再次进入循环
这时mid=(4+7)/2=5,只保留整数部分。那么data[5]就是value里第六个数,也就是8. 因为data[5]8=target8, 所以进入elise后面的语句。就是return mid。
这不就return了5了吗。
TA贡献1831条经验 获得超4个赞
额,这个是折半查找,查8,对吧。
一开始和中间第4的值开始比较,也就是8 和 data[3] , 8 > 4
start=mid+1=4,再进行比较,这时候mid=(4+7)/2=5,也就是8和data[5]比较, 8 = 8,return mid,这个时候mid=5
TA贡献1719条经验 获得超6个赞
第一遍查找,mid值为3,进入else if(target > data[mid]) { start = mid +1;}这一句,start变为4;
第二遍查找,mid值为5,进入else { return mid;} 这一句,不就是5了么
}
TA贡献1818条经验 获得超3个赞
这是二分查找,二分查找法就是查询数组中指定值在数组中第一次出现的索引(前提数组必须是有序的).
你的代码里
start:数组的开始索引
end:数组的最大索引
如果开始索引小于最大索引,就执行查找,先将开始索引和结束索引做除法,求得中间索引,然后判断中间索引对应的值和你要找的目标值的大小关系:
当中间索引的值>目标值,start = 0,end = min - 1 继续循环在中间索引的右边继续找
当中间索引的值<目标值,start = min + 1,end = data.length-1 继续循环在中间索引的左边继续找
当中间索引的值=目标值, 中间索引就是你要找的值,返回mid就可以了
也可以直接调用Arrays的二分查找法
添加回答
举报