|
| 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. |
0 commit comments