Skip to content

Commit 36ef9dd

Browse files
committed
merge sort
1 parent 5728ddc commit 36ef9dd

File tree

4 files changed

+207
-0
lines changed

4 files changed

+207
-0
lines changed

src/z_lc_compress_string.prog.abap

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
*&---------------------------------------------------------------------*
2+
*& Report Z_LC_COMPRESS_STRING
3+
*&---------------------------------------------------------------------*
4+
*&
5+
*&---------------------------------------------------------*
6+
REPORT z_lc_compress_string.
7+
8+
*aaaabbbcccccdee
9+
DATA:lv_cstr TYPE string,
10+
lv_curr TYPE c,
11+
lv_count TYPE i VALUE 1,
12+
lv_next TYPE c.
13+
14+
PARAMETERS: p_string TYPE string.
15+
16+
17+
DATA(lv_strlen) = strlen( p_string ).
18+
19+
20+
DO lv_strlen TIMES.
21+
22+
DATA(lv_index) = sy-index - 1.
23+
24+
25+
lv_curr = p_string+lv_index(1).
26+
IF sy-index LT lv_strlen .
27+
lv_next = p_string+sy-index(1).
28+
ENDIF.
29+
IF lv_curr = lv_next.
30+
lv_count = lv_count + 1.
31+
ELSE.
32+
lv_cstr = | { lv_cstr }{ lv_count }{ lv_curr }|.
33+
lv_count = 1."RESET COUNT
34+
CLEAR:lv_next.
35+
ENDIF.
36+
37+
38+
ENDDO.
39+
40+
WRITE:/ p_string.
41+
WRITE:/ lv_cstr.

src/z_lc_compress_string.prog.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<PROGDIR>
6+
<NAME>Z_LC_COMPRESS_STRING</NAME>
7+
<SUBC>1</SUBC>
8+
<RLOAD>E</RLOAD>
9+
<FIXPT>X</FIXPT>
10+
<UCCHECK>X</UCCHECK>
11+
</PROGDIR>
12+
<TPOOL>
13+
<item>
14+
<ID>R</ID>
15+
<ENTRY>Program Z_LC_COMPRESS_STRING</ENTRY>
16+
<LENGTH>28</LENGTH>
17+
</item>
18+
</TPOOL>
19+
</asx:values>
20+
</asx:abap>
21+
</abapGit>

src/z_lc_merge_sort.prog.abap

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
*&---------------------------------------------------------------------*
2+
*& Report Z_LC_MERGE_SORT
3+
*&---------------------------------------------------------------------*
4+
*&
5+
*&---------------------------------------------------------------------*
6+
REPORT z_lc_merge_sort.
7+
*Divide and conquer approach is used in the merge sort array.
8+
*By finding the midpoint of the array or the input we separate the array/input into two separate sub arrays.
9+
* Taking the left sub array we call the same sub routine recursively , Take the right sub array we do the same, call the sub routine recursively.
10+
*Finally at the end, Merge both the left and right sub arrays in to the final array by comparing both left and right sub arrays.
11+
*Merge sort takes O(nlogn) time complexity, which is usually best kind of algorithm or one of the best kinds of algoirthm apart from the quick sort .
12+
13+
14+
TYPES: lty_left TYPE STANDARD TABLE OF i WITH EMPTY KEY,
15+
lty_form TYPE STANDARD TABLE OF i.
16+
17+
18+
DATA: ls_array TYPE i,
19+
ls_left TYPE i,
20+
ls_right TYPE i.
21+
22+
23+
DATA(lt_array) = VALUE lty_left( ( 3 ) ( 2 ) ( 7 ) ( 6 ) ( 1 ) ( 5 ) ).
24+
25+
PERFORM mergesort TABLES lt_array[].
26+
27+
LOOP AT lt_array INTO ls_array.
28+
29+
WRITE: / ls_array.
30+
31+
ENDLOOP.
32+
*&---------------------------------------------------------------------*
33+
*& Form mergesort
34+
*&---------------------------------------------------------------------*
35+
*& text
36+
*&---------------------------------------------------------------------*
37+
*& --> LT_ARRAY
38+
*&---------------------------------------------------------------------*
39+
FORM mergesort TABLES lt_array TYPE STANDARD TABLE .
40+
41+
42+
43+
DATA: lt_left TYPE STANDARD TABLE OF i,
44+
lt_right TYPE STANDARD TABLE OF i.
45+
46+
DATA(len_array) = lines( lt_array ).
47+
48+
CHECK len_array > 1.
49+
50+
DATA(mid_array) = len_array DIV 2.
51+
* mid_array = mid_array + 1.
52+
53+
IF lt_array[] IS NOT INITIAL.
54+
55+
INSERT LINES OF lt_array FROM 1 TO mid_array INTO TABLE lt_left.
56+
INSERT LINES OF lt_array FROM mid_array + 1 INTO TABLE lt_right.
57+
58+
ENDIF.
59+
60+
61+
62+
PERFORM mergesort TABLES lt_left.
63+
PERFORM mergesort TABLES lt_right.
64+
65+
PERFORM merge TABLES lt_left lt_right lt_array.
66+
67+
68+
69+
ENDFORM.
70+
*&---------------------------------------------------------------------*
71+
*& Form merge
72+
*&---------------------------------------------------------------------*
73+
*& text
74+
*&---------------------------------------------------------------------*
75+
*& --> LT_LEFT
76+
*& --> LT_RIGHT
77+
*& --> LT_ARRAY
78+
*&---------------------------------------------------------------------*
79+
FORM merge TABLES lt_left TYPE lty_form
80+
lt_right TYPE lty_form
81+
lt_array TYPE lty_form.
82+
83+
84+
DATA:i TYPE i VALUE 1,
85+
j TYPE i VALUE 1,
86+
k TYPE i VALUE 1.
87+
88+
DATA(ll) = lines( lt_left ).
89+
DATA(lr) = lines( lt_right ).
90+
91+
WHILE ( i <= ll AND j <= lr ).
92+
93+
94+
IF lt_left[ i ] >= lt_right[ j ].
95+
96+
lt_array[ k ] = lt_right[ j ].
97+
j = j + 1.
98+
ELSE.
99+
lt_array[ k ] = lt_left[ i ].
100+
i = i + 1.
101+
ENDIF.
102+
103+
k = k + 1.
104+
105+
ENDWHILE.
106+
107+
108+
LOOP AT lt_left INTO DATA(ls_left) FROM i.
109+
lt_array[ k ] = ls_left.
110+
111+
k = k + 1.
112+
113+
ENDLOOP.
114+
115+
LOOP AT lt_right INTO DATA(ls_right) FROM j.
116+
lt_array[ k ] = ls_right.
117+
118+
k = k + 1.
119+
120+
ENDLOOP.
121+
122+
CLEAR k.
123+
124+
ENDFORM.

src/z_lc_merge_sort.prog.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
3+
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4+
<asx:values>
5+
<PROGDIR>
6+
<NAME>Z_LC_MERGE_SORT</NAME>
7+
<SUBC>1</SUBC>
8+
<RLOAD>E</RLOAD>
9+
<FIXPT>X</FIXPT>
10+
<UCCHECK>X</UCCHECK>
11+
</PROGDIR>
12+
<TPOOL>
13+
<item>
14+
<ID>R</ID>
15+
<ENTRY>Program Z_LC_MERGE_SORT</ENTRY>
16+
<LENGTH>23</LENGTH>
17+
</item>
18+
</TPOOL>
19+
</asx:values>
20+
</asx:abap>
21+
</abapGit>

0 commit comments

Comments
 (0)