以前学二分法的时候,一直以为,Match的第三个参数只要不为0就是以二分法规律进行查找的,可是今天测试了一下,发现人家用的居然是历遍法,规则是:
从上往下开始找,遇到比查找值小的前一个的位置,或者第一次出现与查找值相同的位置;如果查找值比查找范围内的第一个值大,则结果为NA;如果查找值比查找范围里所有的数都小,那就返回最后一个的位置。
为说明情况,示例中所有数据是0-9之间的整数。来看几个测试结果。
查找1:
从B2开始往下找,第一次出现1的位置是第六行,所以结果是6。
查找2:
同上,从B2开始往下找,第一次出现2的位置是第五行,所以结果是5。
查找3:
同上,从B2开始往下找,第一个出现3的位置是第二行,所以结果是2,后面再出现的3被忽略。
查找4:
从B2开始往下找,虽然第一次出现4的位置是第七行,但是在第二行出现了比4小的3,所以结果是3所在的前一行1。
查找5-8与查找4原因相同。
查找9:
B2比9小,于是笨电脑就以为下面的数据都比9小,于是返回NA。
如果查找值比查找范围里所有的数都小,那就返回最后一个的位置。
后来又编了段代码测试Match第三个参数分别为1和-1时的运行时间,发现差异真的很大,如果-1也是按二分法进行查找的话,运行速度不会是1的六倍。
目前这个只是从结果中反推出来的,并无任何源代码佐证,欢迎大家参与拍砖,谢谢。