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(怎么这么巧)修改后搬到博客园

posted @ 2025-05-19 14:12  熬肥妖  阅读(42)  评论(0)    收藏  举报