BINARY SEARCH 二分法实践

二分法检索(binary search)又称折半检索,其基本思想是设字典中的元素从小到大有序地存放在数组(array)中:  
        首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功;    
        否则,
                若key小,则在字典前半部分中继续进行二分法检索;           
                若key大,则在字典后半部分中继续进行二分法检索。    
        这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。   
 二分法检索是一种效率较高的检索方法,要求字典在顺序表中按关键码排序。

对于二分查找,表必须根据特殊的搜索关键字来升序排列,否则这个搜索不会找到正确的行。

例子:

        CLEAR: lv_gl_s,lv_gl_h.
        READ TABLE it_gl_result INTO lv_gl_s WITH KEY racct = <fs_gl>-racct drcrk = 'S' BINARY SEARCH.
        READ TABLE it_gl_result INTO lv_gl_h WITH KEY racct = <fs_gl>-racct drcrk = 'H' BINARY SEARCH.

        lv_gl_data-ba_amount = lv_gl_s-hslvt - ABS( lv_gl_h-hslvt ).

以上摘自:http://blog.csdn.net/wengyuyu1234/article/details/8185805


遇到的问题,分享如下:

- 求证对应:“对于二分查找,表必须根据特殊的搜索关键字来升序排列,否则这个搜索不会找到正确的行。”

      实践证明:排序字段顺序,需与查询条件字段顺序一致,代码如下。

DATA:BEGIN OF lt OCCURS 0 ,
      a(4) TYPE c,
      b(4) TYPE c,
     END OF lt.

lt-a(4) = '1'.    lt-b(4) = '1'.    APPEND lt.
lt-a(4) = '1'.    lt-b(4) = '2'.    APPEND lt.
lt-a(4) = '2'.    lt-b(4) = '1'.    APPEND lt.
lt-a(4) = '4'.    lt-b(4) = '1'.    APPEND lt.
lt-a(4) = '5'.    lt-b(4) = '2'.    APPEND lt.
lt-a(4) = '6'.    lt-b(4) = '2'.    APPEND lt.
lt-a(4) = '7'.    lt-b(4) = '3'.    APPEND lt.

SORT lt.

READ TABLE lt WITH  KEY
                        "b(4) = '2' a(4) = '1' " result is N
                        a(4) = '1' b(4) = '2' " result is Y
                      BINARY SEARCH.

IF sy-subrc = 0.
  WRITE 'Y'.
ELSE.
  WRITE 'N'.
ENDIF.
      实践分析:查询字段与排序字段顺序不符,将导致记录查找不到。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值