赛跑网

 找回密码
 注册

QQ登录

只需一步,快速开始

快捷登录

查看: 1594|回复: 1

20、ABAP语法之二分查找

[复制链接]
发表于 2015-6-24 13:46:38 | 显示全部楼层 |阅读模式
本帖最后由 SAPOK_ABAP 于 2015-6-26 16:42 编辑

内表中数据的遍历常用LOOP,内表数据的单笔查询常用READ TABLE;下面我们主要看内表数据的单笔查询。对于标准
内表来说,单笔查询时如果不加任何的算法,如:
READ TABLE IT_TAB INTO WA_TAB WITH KEY MATNR = L_MATNR.
开始匹配MATNR1
MATNR2
...
...
...
...
MATNR20
MATNR20
运算时,系统会从内表的第一笔数据开始根据条件比对,如果条件成立,查询即可结束,范围SY-SUBRC = 0和查询结果;
如果失败,指针向下移动一位,继续匹配。从上面可看出若不加任何算法,当数据量很大时,该语句匹配的次数很多,性能很差。
相反,若通过二分法查找,如:
READ TABLE IT_TAB INTO WA_TAB WITH KEY MATNR = L_MATNR BINARY SEARCH.
MATNR1
MATNR2
...
开始匹配...
...
...
MATNR20
MATNR21

匹配次数会大大减少;二分法又称折半查找法,查询时不是从第一笔开始匹配数据,而是从中间匹配,根据匹配结果判断要
查询的数据在折半的前一半还是后一半,系统会判断中间值与目标的大小关系;中间值>目标值,则指针转向前一半继续查询;
中间值<目标值,则指针转向后一半继续查询,依次找到数据。
这种查找方法,对数据的格式有严格的要求,从上面的过程可看到,数据必须按排序,而且必须是升序排列。至于查找次数,
数据愈多,性能提升越明显。

最近访客

  • tbb1177
    2023-11-29




上一篇:19、ABAP语法之LOOP和READ
下一篇:21、ABAP内表分类标准之一
本楼点评(0) 收起
高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

小黑屋|联系我们|赛跑网 ( QQ:108519493QQfsq

GMT+8, 2024-4-29 00:50 , Processed in 0.170818 second(s), 36 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表