博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABAP 自定义排序的思想(不用系统标准的SORT语句)
阅读量:6568 次
发布时间:2019-06-24

本文共 4187 字,大约阅读时间需要 13 分钟。

不用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_DATA25 *&---------------------------------------------------------------------*26 *       随机产生10个 -100 到100 之间不重复的数27 *----------------------------------------------------------------------*28 *  -->  p1        text29 *  <--  p2        a30 *----------------------------------------------------------------------*31 FORM frm_full_data.32   DATA:lv_len TYPE i.33   WHILE lv_len < 10.34 * 随机产生一个数35     CALL FUNCTION 'QF05_RANDOM_INTEGER'36       EXPORTING37         ran_int_max = 10038         ran_int_min = -10039       IMPORTING40         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_DATA48 *&---------------------------------------------------------------------*49 *&      Form  FRM_SORT50 *&---------------------------------------------------------------------*51 *       开始排序52 *----------------------------------------------------------------------*53 *  -->  p1        text54 *  <--  p2        a55 *----------------------------------------------------------------------*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 a60                       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_SORT66 67 *&---------------------------------------------------------------------*68 *&      Form  frm_min69 *&---------------------------------------------------------------------*70 *       找出t_a 中最小的数 p_n71 *----------------------------------------------------------------------*72 *  -->  p1        t_a73 *  <--  p2        p_n74 *----------------------------------------------------------------------*75 FORM frm_get_min TABLES t_a LIKE b76                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_min85 *&---------------------------------------------------------------------*86 *&      Form  FRM_SHOW_DATA87 *&---------------------------------------------------------------------*88 *       text89 *----------------------------------------------------------------------*90 *  -->  p1        text91 *  <--  p2        text92 *----------------------------------------------------------------------*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

运行效果如图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/1187163927ch/p/9364539.html

你可能感兴趣的文章
0510JS基础:定义、输出、变量
查看>>
C++——友元 friend
查看>>
IPC——线程信号问题
查看>>
ajax 的理论以及需要的常用参数
查看>>
【Unity3D】资源对象、预设、查找对象、组合模式等知识点
查看>>
iOS开发UI篇—实现UITableview控件数据刷新
查看>>
linux命令
查看>>
chrome取消安全模式
查看>>
团队-象棋游戏-设计文档
查看>>
hibernate Expression详解
查看>>
HTTP长连接和短连接以及推送服务原理(转)
查看>>
问卷设计入门
查看>>
input子系统分析之三:驱动模块
查看>>
jquery 选择时间(小时)区间(四)
查看>>
jquery 选择时间(小时)区间(二)
查看>>
WebService的编写与调用
查看>>
(模板)字符串哈希
查看>>
input:focus
查看>>
java中String,int,Integer,char、double类型转换
查看>>
Hdoj 2544
查看>>