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

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

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

算法思想一:

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

原数组: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 = [106652102-65859915632102118]

 

  步骤

   新数组

          数组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 STANDARD TABLE OF a. 
15  
16 PERFORM frm_full_data . 
17 PERFORM frm_show_data USING '排序前'. 
18  
19 PERFORM frm_sort. 
20 PERFORM frm_show_data USING '排序后'. 
21  
22  
23 *&---------------------------------------------------------------------* 
24 *&      Form  FRM_FULL_DATA 
25 *&---------------------------------------------------------------------* 
26 *       随机产生10个 -100 到100 之间不重复的数 
27 *----------------------------------------------------------------------* 
28 *  -->  p1        text 
29 *  <--  p2        a 
30 *----------------------------------------------------------------------* 
31 FORM frm_full_data. 
32   DATA:lv_len TYPE i. 
33   WHILE lv_len < 10. 
34 * 随机产生一个数 
35     CALL FUNCTION 'QF05_RANDOM_INTEGER' 
36       EXPORTING 
37         ran_int_max = 100 
38         ran_int_min = -100 
39       IMPORTING 
40         ran_int     = a-num. 
41     READ TABLE a WITH KEY num = a-num. 
42     CHECK sy-subrc <> 0. 
43     APPEND a. 
44     DESCRIBE TABLE a LINES lv_len. 
45   ENDWHILE. 
46  
47 ENDFORM.                    " FRM_FULL_DATA 
48 *&---------------------------------------------------------------------* 
49 *&      Form  FRM_SORT 
50 *&---------------------------------------------------------------------* 
51 *       开始排序 
52 *----------------------------------------------------------------------* 
53 *  -->  p1        text 
54 *  <--  p2        a 
55 *----------------------------------------------------------------------* 
56 FORM frm_sort . 
57   DATA:lt_b LIKE a OCCURS 0 WITH HEADER LINE. 
58   WHILE a[] IS NOT INITIAL. 
59     PERFORM frm_get_min TABLES a 
60                       CHANGING lt_b-num. 
61     APPEND lt_b. 
62     DELETE a WHERE num = lt_b-num. 
63   ENDWHILE. 
64   a[] = lt_b[]. 
65 ENDFORM.                    " FRM_SORT 
66  
67 *&---------------------------------------------------------------------* 
68 *&      Form  frm_min 
69 *&---------------------------------------------------------------------* 
70 *       找出t_a 中最小的数 p_n 
71 *----------------------------------------------------------------------* 
72 *  -->  p1        t_a 
73 *  <--  p2        p_n 
74 *----------------------------------------------------------------------* 
75 FORM frm_get_min TABLES t_a LIKE b 
76                CHANGING p_n. 
77   READ TABLE t_a INDEX 1. 
78   p_n = t_a-num. 
79   LOOP AT t_a. 
80     IF t_a-num <= p_n. 
81       p_n = t_a-num. 
82     ENDIF. 
83   ENDLOOP. 
84 ENDFORM.                    "frm_min 
85 *&---------------------------------------------------------------------* 
86 *&      Form  FRM_SHOW_DATA 
87 *&---------------------------------------------------------------------* 
88 *       text 
89 *----------------------------------------------------------------------* 
90 *  -->  p1        text 
91 *  <--  p2        text 
92 *----------------------------------------------------------------------* 
93 FORM frm_show_data USING p_str TYPE string. 
94   WRITE:/,p_str,':'. 
95   LOOP AT a. 
96     WRITE:a-num,' '. 
97   ENDLOOP. 
98 ENDFORM.                    " FRM_SHOW_DATA

View Code

运行效果如图:

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

 

 

 

 

 

 

 

 

 

 

 

 

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18029.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论