zl程序教程

您现在的位置是:首页 >  后端

当前栏目

用ABAP实现的冒泡排序算法

算法 实现 ABAP 冒泡排序
2023-09-14 09:02:49 时间
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: '.
LOOP AT lt_array INTO ls_array.
  WRITE: ls_array-number.
ENDLOOP.

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.

    ENDDO.
  ENDMETHOD.
ENDCLASS.