Match第三个参数为-1时的计算规则
以前学二分法的时候,一直以为,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-7与查找4原因相同。
查找8:B2比8小,于是笨电脑就以为下面的数据都比8小,就算后面有8也返回NA。
查找9:B2比9小,于是笨电脑就以为下面的数据都比9小,于是返回NA。
查找-1:二参里所有数都比-1大,那就返回最后一个的位置,结果是9。
后来又编了段代码测试Match第三个参数分别为1和-1时的运行时间,发现差异真的很大,如果-1也是按二分法进行查找的话,运行速度不会是1的六倍。
2014-05-19 14:41:24成文
2025-5-19(怎么这么巧)修改后搬到博客园