ABAP 自定义排序的思想(不用系统标准的SORT语句)
不用ABAP的标准SORT语句,你能将下面这个数组按从小到大(或从大到小)的顺序重新排列,并计算其算法复杂度吗?
现在假设有一个数组:A = [10,66,52,102,-65,85,99,1,56,32,10,21,18]
算法思想一:
按数组顺序,每次读取一个数字放到新数组中,将这个数字与该数组中所有数字进行循环比较,确定存放位置
原数组:A = [10,66,52,102,-65,85,99,1,56,32,10,21,18]
步骤 |
排序后数组 |
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 = [10,66,52,102,-65,85,99,1,56,32,10,21,18]
步骤 |
新数组 |
数组A中剩余 |
1 |
-65 |
10,66,52,102,85,99,1,56,32,10,21,18 |
2 |
-65 |
10,66,52,102,85,99,56,32,10,21,18 |
3 |
-65 1 10 10 |
66,52,102,85,99,56,32,21,18 |
4 |
-65 1 10 10 |
66,52,102,85,99,56,32,21 |
5 |
-65 1 10 10 18 |
66,52,102,85,99,56,32 |
6 |
。。。 |
。。。。。。 |
7 |
。。。。。。 |
。。。 |
个人写的ABAP代码如下(采用的第二种算法思想,希望各位博友能看明白):
1.首先随机制造10个[-100,100]内的随机不重复的数字放到数组A中,
2.然后循环数组A,并每次取出一个最大的数字放到数组B中,然后删除数组A中的该数字,直到数组A被清空。
代码如下:
*&---------------------------------------------------------------------*
*& Report ZCHENH038
*&
*&---------------------------------------------------------------------*
*&
*&不用标准 sort语法 自己写排序语法
*&---------------------------------------------------------------------* REPORT zchenh038. DATA:BEGIN OF a OCCURS ,
num TYPE i,
END OF a,
b LIKE STANDARD TABLE OF a. PERFORM frm_full_data .
PERFORM frm_show_data USING '排序前'. PERFORM frm_sort.
PERFORM frm_show_data USING '排序后'. *&---------------------------------------------------------------------*
*& Form FRM_FULL_DATA
*&---------------------------------------------------------------------*
* 随机产生10个 -100 到100 之间不重复的数
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 a
*----------------------------------------------------------------------*
FORM frm_full_data.
DATA:lv_len TYPE i.
WHILE lv_len < .
* 随机产生一个数
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_max =
ran_int_min = -
IMPORTING
ran_int = a-num.
READ TABLE a WITH KEY num = a-num.
CHECK sy-subrc <> .
APPEND a.
DESCRIBE TABLE a LINES lv_len.
ENDWHILE. ENDFORM. " FRM_FULL_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SORT
*&---------------------------------------------------------------------*
* 开始排序
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 a
*----------------------------------------------------------------------*
FORM frm_sort .
DATA:lt_b LIKE a OCCURS WITH HEADER LINE.
WHILE a[] IS NOT INITIAL.
PERFORM frm_get_min TABLES a
CHANGING lt_b-num.
APPEND lt_b.
DELETE a WHERE num = lt_b-num.
ENDWHILE.
a[] = lt_b[].
ENDFORM. " FRM_SORT *&---------------------------------------------------------------------*
*& Form frm_min
*&---------------------------------------------------------------------*
* 找出t_a 中最小的数 p_n
*----------------------------------------------------------------------*
* --> p1 t_a
* <-- p2 p_n
*----------------------------------------------------------------------*
FORM frm_get_min TABLES t_a LIKE b
CHANGING p_n.
READ TABLE t_a INDEX .
p_n = t_a-num.
LOOP AT t_a.
IF t_a-num <= p_n.
p_n = t_a-num.
ENDIF.
ENDLOOP.
ENDFORM. "frm_min
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_show_data USING p_str TYPE string.
WRITE:/,p_str,':'.
LOOP AT a.
WRITE:a-num,' '.
ENDLOOP.
ENDFORM. " FRM_SHOW_DATA
运行效果如图:
ABAP 自定义排序的思想(不用系统标准的SORT语句)的更多相关文章
- python学习之算法、自定义模块、系统标准模块(上)
算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...
- Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)
目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操 ...
- Python 第五篇(上):算法、自定义模块、系统标准模块(time 、datetime 、random 、OS 、sys 、hashlib 、json和pickle)
一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应 ...
- 【C++】标准库sort函数的自定义排序
自定义排序需要单独写一个compare函数 例1 LeetCode 056. Merge Intervals Given a collection of intervals, merge all ov ...
- .NET/C#中对自定义对象集合进行自定义排序的方法
一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...
- Python自定义排序及我实际遇到的一些题目实例
写在前面,本文主要介绍Python基础排序和自定义排序的一些规则,如果都比较熟悉,可以直接翻到第三节,看下实际的笔试面试题中关于自定义排序的应用. 一.基础排序 排序是比较基础的算法,与很多语言一样, ...
- Objective-C之NSArray(数组)默认排序与自定义排序
在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...
- XtraReport交叉表隐藏列标题及自定义排序
1.隐藏列标题 用DevExpress PivotGrid report 做报表的时候,将字段拖放到报表中后,ColumnArea和DataArea会显示两个标题字段,如下图: 选中交叉表,设置以下属 ...
- Easyui datagrid自定义排序
做项目遇到个关于排序问题,想着在前端排序,正好Easyui有这个功能,所以就拿来用了一下,因为跟官网的Demo不太一样,所以总结一下: 首先这一列是要排序的列(当然,在生产环境,这一列是隐藏的,在开发 ...
随机推荐
- JVM总结-Java 虚拟机是怎么识别目标方法(上)
重载与重写 在 Java 程序里,如果同一个类中出现多个名字相同,并且参数类型相同的方法,那么它无法通过编译.也就是说,在正常情况下,如果我们想要在同一个类中定义名字相同的方法,那么它们的参数类型必须 ...
- 2、申请苹果App ID
在“iOS Certificates”页面“Identifiers"下选择“App IDs",可查看到已申请的所有App ID,点击右上角的加号可创建新“App ID”:打开“Re ...
- UVA-714-二分+贪心
题意:K个人复制M本书,每本书有Pi页,要求每个人都能分到至少一本书,如果分到多本书籍,分到的书籍编号是连续的,并且K个人里面分到的书籍总页数最大的那个人总数最小. 如果有多组解,保证 K1 < ...
- uva-310-L--system-暴力枚举
题意:输入四个字符串a,b,w,z,经过一定的替换规则,问w或者w的子串中是否包含z. 替换规则如下.w中的字符a全部替换成a字符串,b字符全部替换成b字符串. 枚举过程, 根据替换规则对w进行替换, ...
- 21.xpath定位中id 、starts-with、contains、text()和last() 的用法
xpath语法:id .starts-with.contains.text()和last() 的用法 <input id="su" class="bg s_btn ...
- windows server 域分发与分配软件
参考网站:https://blog.csdn.net/southwind0/article/details/80734508 1.win 2008创建域 https://jingyan.baidu.c ...
- hadoop动态添加删除节点datanode及恢复
1. 配置系统环境 主机名,ssh互信,环境变量等 本文略去jdk安装,请将datanode的jdk安装路径与/etc/hadoop/hadoop-evn.sh中的java_home保持一致,版本ha ...
- Runnable接口和Callable接口的区别。
Callable需要实现call方法,而Runnable需要实现run方法:并且,call方法还可以返回任何对象,无论是什么对象,JVM都会当作Object来处理.但是如果使用了泛型,我们就不用每次都 ...
- 开发webapp手机返回键 退出问题 摘录
mui进行手机物理键的监听 确保引入mui 调用以下函数 // android 返回按键处理 androidBack(store, data) { try { mui.init({ keyEventB ...
- git-搭建企业git服务器
1.安装 yum install git 2.增加用户 useradd git -d /home/git -g git 3.查看公钥鉴权文件是否存在 cat /home/git/.ssh/autho ...