天天看点

用ABAP实现的冒泡排序算法

REPORT ztest_bubblesort.

TYPES:BEGIN OF ty_line,

       number TYPE i,

     END OF ty_line.

DATA: lt_array TYPE STANDARD TABLE OF ty_line,

     ls_array TYPE ty_line,

     ls_array_temp type ty_line,

     lv_length TYPE i.

DATA: i TYPE i,

     j TYPE i,

     k TYPE i.

DO 10 TIMES.

 CLEAR ls_array.

 CALL FUNCTION 'QF05_RANDOM_INTEGER'

   EXPORTING

     ran_int_max   = 100

     ran_int_min   = 1

   IMPORTING

     ran_int       = ls_array-number

   EXCEPTIONS

     invalid_input = 1

     OTHERS        = 2.

 IF sy-subrc <> 0.

   WRITE:/ 'Error occured.'.

   EXIT.

 ENDIF.

 APPEND ls_array TO lt_array.

ENDDO.

LOOP AT lt_array INTO ls_array.

   WRITE: ls_array-number.

ENDLOOP.

 lv_length = lines( lt_array ).

 i = 1.

 DO lv_length - 1 TIMES.

   j = lv_length - i.

   k = 1.

   DO j TIMES.

     CLEAR: ls_array, ls_array_temp.

     READ TABLE lt_array INTO ls_array INDEX k.

     READ TABLE lt_array INTO ls_array_temp INDEX k + 1.

     IF ls_array-number > ls_array_temp-number .

       MODIFY lt_array FROM ls_array_temp INDEX k.

       MODIFY lt_array FROM ls_array INDEX k + 1 .

     ENDIF.

     k = k + 1.

   ENDDO.

   i = i + 1.

 ENDDO.

WRITE:/ 'result: '.

 WRITE: ls_array-number.

class ZCL_MARCH_SORT definition

 public

 final

 create public .

public section.

 types:

   tt_table TYPE TABLE OF int4 .

 methods BUBBLE_SORT

   changing

     !CT_TABLE type TT_TABLE .

 PROTECTED SECTION.

 PRIVATE SECTION.

ENDCLASS.

CLASS ZCL_MARCH_SORT IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Instance Public Method ZCL_MARCH_SORT->BUBBLE_SORT

* +-------------------------------------------------------------------------------------------------+

* | [<-->] CT_TABLE                       TYPE        TT_TABLE

* +--------------------------------------------------------------------------------------</SIGNATURE>

 METHOD bubble_sort.

   DATA(length) = lines( ct_table ).

   DATA(mark) = 1.

   DATA nextnum TYPE int4 .

   DATA currentnum TYPE int4 .

   DATA tempnum TYPE int4.

   DO lines( ct_table ) TIMES .

     WHILE mark < length .

       IF ct_table[ mark ] > ct_table[  mark + 1 ].

         tempnum = ct_table[ mark ] .

         ct_table[ mark ] = ct_table[  mark + 1 ] .

         ct_table[  mark + 1 ] = tempnum .

       ENDIF.

       mark = mark + 1.

     ENDWHILE.

     mark = 1.

     length = length - 1.

 ENDMETHOD.

继续阅读