ABAP 自定义排序的思想(不用系统标准的SORT语句)

Posted 1187163927ch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP 自定义排序的思想(不用系统标准的SORT语句)相关的知识,希望对你有一定的参考价值。

不用ABAP的标准SORT语句,你能将下面这个数组按从小到大(或从大到小)的顺序重新排列,并计算其算法复杂度吗?

 

现在假设有一个数组:A = [106652102-65859915632102118]

算法思想一:

 

按数组顺序,每次读取一个数字放到新数组中,将这个数字与该数组中所有数字进行循环比较,确定存放位置

 

1

10

2

10 66

3

10 52 66

4

10 52   66  102

5

-65 10 52 66 102

6

-65 10 52 66 85   102

7

。。。

8

。。。。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

算法思想二:

 

每次从数组A重拿出一个最大(或最小)数字,拿出之后将数组A中的数字删除该数字,然后循环直到数组A被删空。

 

  步骤

   新数组

          数组A中剩余

1

-65

106652102859915632102118

2

-65 1

10665210285995632102118

3

-65 1 10 10

6652102859956322118

4

-65 1   10 10 18

66521028599563221

5

-65 1   10 10 18 21

665210285995632

6

。。。

。。。。。。

7

。。。。。。

。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

人写的ABAP代码如下(采用的第二种算法思想,希望各位博友能看明白):

1.首先随机制造10个[-100,100]内的随机不重复的数字放到数组A中,

2.然后循环数组A,并每次取出一个最大的数字放到数组B中,然后删除数组A中的该数字,直到数组A被清空。

代码如下:

技术分享图片
 1 *&---------------------------------------------------------------------*
 2 *& Report  ZCHENH038
 3 *&
 4 *&---------------------------------------------------------------------*
 5 *&
 6 *&不用标准 sort语法 自己写排序语法
 7 *&---------------------------------------------------------------------*
 8 
 9 REPORT zchenh038.
10 
11 DATA:BEGIN OF a OCCURS 0,
12       num TYPE i,
13       END OF a,
14      b LIKE a OCCURS 0 WITH HEADER LINE,
15      c LIKE STANDARD TABLE OF a.
16 
17 PERFORM frm_full_data.
18 
19 WRITE:/,排序前:,/.
20 LOOP AT a.
21   WRITE:a-num, .
22 ENDLOOP.
23 
24 PERFORM frm_sort.
25 WRITE:/,排序后:,/.
26 LOOP AT a.
27   WRITE:a-num, .
28 ENDLOOP.
29 
30 *&---------------------------------------------------------------------*
31 *&      Form  FRM_FULL_DATA
32 *&---------------------------------------------------------------------*
33 *       随机产生100个 -100 到100之间的数
34 *----------------------------------------------------------------------*
35 *  -->  p1        text
36 *  <--  p2        text
37 *----------------------------------------------------------------------*
38 FORM frm_full_data .
39   DATA:n TYPE int4,
40         lv_len TYPE i.
41   WHILE lv_len < 10.
42 
43     CALL FUNCTION QF05_RANDOM_INTEGER
44       EXPORTING
45         ran_int_max = 100
46         ran_int_min = -100
47       IMPORTING
48         ran_int     = n.
49 *    不产生重复数据
50     READ TABLE a WITH KEY num = n.
51     IF sy-subrc <> 0.
52       a-num = n.
53       APPEND a.
54       WRITE:随机产生了重复数据:,n,/.
55     ENDIF.
56 *    获取内表的行数
57     DESCRIBE TABLE a LINES lv_len.
58   ENDWHILE.
59 
60 ENDFORM.                    " FRM_FULL_DATA
61 *&---------------------------------------------------------------------*
62 *&      Form  FRM_SORT
63 *&---------------------------------------------------------------------*
64 *       开始排序
65 *----------------------------------------------------------------------*
66 *  -->  p1        text
67 *  <--  p2        text
68 *----------------------------------------------------------------------*
69 FORM frm_sort .
70   WHILE a[] IS NOT INITIAL.
71     CLEAR b.
72     PERFORM frm_get_min TABLES a CHANGING b-num.
73     APPEND b.
74     DELETE a WHERE num = b-num.
75   ENDWHILE.
76   CLEAR:a,a[].
77   a[] = b[].
78 ENDFORM.                    " FRM_SORT
79 
80 *&---------------------------------------------------------------------*
81 *&      Form  frm_min
82 *&---------------------------------------------------------------------*
83 *       找出最小的数
84 *----------------------------------------------------------------------*
85 FORM frm_get_min TABLES p_a LIKE c CHANGING p_num TYPE i.
86   CLEAR:p_num.
87   READ TABLE p_a INDEX 1.
88   p_num = p_a-num.
89   LOOP AT p_a.
90     IF p_a-num <= p_num.
91       p_num = p_a-num.
92     ENDIF.
93   ENDLOOP.
94 ENDFORM.                    "frm_min
View Code

运行效果如图:

 

 技术分享图片

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于ABAP 自定义排序的思想(不用系统标准的SORT语句)的主要内容,如果未能解决你的问题,请参考以下文章

一文掌握使用 Go 标准库 sort 对切片进行排序

谷歌自定义搜索排序日期范围标准不起作用

abap alv 不同字段 分类汇总

STL sort 源码解析

ABAP ALV LVC_T_SORT 合并单元格问题

Python 使用列表的sort()进行多级排序实例演示,list的sort()排序方法使用详解,python3中sort()的cmp自定义排序方法,sort()的逆序倒叙排序方法