码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-25 11:25:25      阅读:449      评论:0      收藏:0      [点我收藏+]

标签:vertica   func   col   one   where   技术   dir   系统   dom   

不用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语句)

标签:vertica   func   col   one   where   技术   dir   系统   dom   

原文地址:https://www.cnblogs.com/1187163927ch/p/9364539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!