不用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语句)的更多相关文章

  1. python学习之算法、自定义模块、系统标准模块(上)

    算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...

  2. Python 第五篇(下):系统标准模块(shutil、logging、shelve、configparser、subprocess、xml、yaml、自定义模块)

    目录: shutil logging模块 shelve configparser subprocess xml处理 yaml处理 自定义模块 一,系统标准模块: 1.shutil:是一种高层次的文件操 ...

  3. Python 第五篇(上):算法、自定义模块、系统标准模块(time 、datetime 、random 、OS 、sys 、hashlib 、json和pickle)

    一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应 ...

  4. 【C++】标准库sort函数的自定义排序

    自定义排序需要单独写一个compare函数 例1 LeetCode 056. Merge Intervals Given a collection of intervals, merge all ov ...

  5. .NET/C#中对自定义对象集合进行自定义排序的方法

    一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car ...

  6. Python自定义排序及我实际遇到的一些题目实例

    写在前面,本文主要介绍Python基础排序和自定义排序的一些规则,如果都比较熟悉,可以直接翻到第三节,看下实际的笔试面试题中关于自定义排序的应用. 一.基础排序 排序是比较基础的算法,与很多语言一样, ...

  7. Objective-C之NSArray(数组)默认排序与自定义排序

    在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...

  8. XtraReport交叉表隐藏列标题及自定义排序

    1.隐藏列标题 用DevExpress PivotGrid report 做报表的时候,将字段拖放到报表中后,ColumnArea和DataArea会显示两个标题字段,如下图: 选中交叉表,设置以下属 ...

  9. Easyui datagrid自定义排序

    做项目遇到个关于排序问题,想着在前端排序,正好Easyui有这个功能,所以就拿来用了一下,因为跟官网的Demo不太一样,所以总结一下: 首先这一列是要排序的列(当然,在生产环境,这一列是隐藏的,在开发 ...

随机推荐

  1. 【Selenium-WebDriver自学】WebDriver断言处理(十二)

    断言使用 http://www.cnblogs.com/itliucheng/p/5578788.html http://blog.csdn.net/gzh0222/article/details/7 ...

  2. VS使用GUID(UUID的基础知识)

    UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定. UU ...

  3. [Unity动画]03.动画事件

    1.找到动画,添加动画事件 2.在脚本中添加回调方法 TestAnimator.cs using UnityEngine; public class TestAnimator : MonoBehavi ...

  4. 快速了解CSS3当中的HSLA 颜色值怎么算

    CSS3文档中提到:(HSLA) H是色度,取值在0度~360度之间,0度是红色,120度是绿色,240度是蓝色.360度也是红色. S是饱和度,是色彩的纯度,是一个百分比的值,取值在0%~100%, ...

  5. [Android]Android布局优化之 merge

    转载请标明:转载于http://www.cnblogs.com/Liuyt-61/p/6602915.html -------------------------------------------- ...

  6. sublime text3 汉化

    1.sublime text3 下载地址:http://sublimetextcn.com/ 2.安装完毕 进入sublime主页面,点击菜单栏中“preferences”,弹出选项中找到“packa ...

  7. 37.scrapy解决翻页及采集杭州造价网站材料数据

    1.目标采集地址: http://183.129.219.195:8081/bs/hzzjb/web/list 2.这里的翻页还是较为简单的,只要模拟post请求发送data包含关键参数就能获取下一页 ...

  8. python中的type

    我们常用type()来查看类型,使用方法如下: 1 a = "zzzq" 2 b = 1 3 c = (1, "zzq123") 4 d = [2, " ...

  9. JVM jmap dump 分析dump文件 / 如何使用Eclipse MemoryAnalyzer MAT 排查线上问题

    jhat简介 jhat用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言 这个工具并不是想用于应用系统中而是用于"离线" ...

  10. ASP.NET前台代码绑定后台变量方法总结

    经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有<%= str%>和<%# str %>两种方式,这里简单总结一下.如有错误或异议之处,敬请各位指教. 一方 ...