首先从字面理解二分,二分就是一分为二,对折的意思,那么这个一分为二和二分法查找有什么关联?
举一个简单的例子,比如说你家里的电路坏了,找一个电工给你修理,但电工也不知道是哪里的线路出了问题,这个时候他会先从电线的中间先检查,
第一种情况,如果中间的电路是没问题的,那么可以判断前面的一段都没问题,所以有问题是在后面那一段,这个时候他又从后面这段的中间位置找,如果仍然没有问题 再往后面的中间位置找 以此类推!
第二种情况,如果中间的电路是有问题的,那么可以判断问题出现在前面的那一段,这个时候他又从前面这段的中间位置找,如果仍然有问题 再往前面的中间位置找 以此类推!
相信通过上面的题外话 应该能理解大概了
进入主题
lookup要求按升序排序,当你是乱序是他也会认为是升序排序的
1 中值的理解
计算中值公式INT((总个数+1)/2)
2当查找值与中值相等时,继续往下(右)查找
LOOKUP(40,{20,30,40,40,50},{"A","B","C","D","E"})
查找值为40,第一个40为中值 但返回结果不是中值所对应的C,而是第二个40所对应的D
结果返回D
3,当查找值大于了中值,继续往下(右)查找
LOOKUP(40,{10,20,30,40,50},{"A","B","C","D","E"})
查找值为40,30为中值,40>30,继续往下(右)查找,找到40,结果返回D
4,当查找值小于了中值,继续往上(左)查找
LOOKUP(10,{10,20,30,40,50},{"A","B","C","D","E"})
查找值为10,中值为30,10<30,继续往上(左)查找,找到10,结果返回A
5,如果查找值比第2参数最大的值还大,则返回最后一个对应的值
LOOKUP(9999,{10,20,30,40,50},{"A","B","C","D","E"})
查找值为9999,中值为30,后面没有一个值是9999,他会返回最后一个对应的值E
同理当看到很多同学写lookup(1,0/区域,返回区域)为什么查找值为1,为什么用0/
这里做详细的解释
0/任何数为0 那么它会得出{0,0,0,0}这么一个数组,现在查找值是1, 1大于0,后面没有一个是1 他同样的会返回最后一个对应的值
总结(LOOKUP忽略错误值,当看见别人写9e+307(座/々)时 其实他要找的就是最后一个值)9e307是针对数字 座针对文本
|