-2
Former Member

Binary search on an internal table which has both ascending and descending order sorted fields

Hi,

I have a logic in my program where the internal table is sorted both ascending and descending as shown below:

Sort itab by A B ascending C D descending.

Can I use binary search on this if I read the table only with the first two fields like REAT itab by A B Binary Search? I thought this should work, but it's failing. Can you please help me with this? I know there are too many posts already posted reg. Binary search, but still couldn't find anything very similar to this.

Regards,

Rajarajan.

10|10000 characters needed characters exceeded
• "I thought this should work, but it's failing."

As Horst said, please be factual, what do you expect exactly, what do you get exactly? With an example please!

• Oct 10, 2016 at 12:55 PM

You should use a SORTED table for preference. But if you have to use a standard table, then if you read the documentation about BINARY SEARCH, you'll see it only applies to ascending orders.

10|10000 characters needed characters exceeded
• Oct 11, 2016 at 02:44 PM

"I thought this should work, but it's failing."

What's exactly your problem? The following is working perfectly fine:

```DATA(rnd) = cl_abap_random_int=>create( seed = + sy-uzeit
min = 1
max = 100 ).
DATA:
BEGIN OF line,
a TYPE i,
b TYPE i,
c TYPE i,
d TYPE i,
END OF line,
itab LIKE TABLE OF line WITH EMPTY KEY.
DO 10000 TIMES.
itab = VALUE #( BASE itab
( a = rnd->get_next( )
b = rnd->get_next( )
c = rnd->get_next( )
d = rnd->get_next( ) )
).
ENDDO.
SORT itab BY a b ASCENDING c d DESCENDING.
READ TABLE itab INTO DATA(wa) WITH KEY a = 10 b = 10 BINARY SEARCH.
BREAK-POINT.```
10|10000 characters needed characters exceeded
• Sandra Rossi Former Member

As Matthew said previously: "if you read the documentation about BINARY SEARCH, you'll see it only applies to ascending orders"

• Nov 07, 2016 at 08:12 PM

In addition to ABAP documentation, you can find some information about binary search in this ancient blog. Hopefully it'll make it clear.