不用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被清空。

代码如下:

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

    alias demoAlias1='_(){ git checkout -b $1; command2;}; _'

  2. Structs 2 session 学习

    后台获取 值类型  request.getSession().setAttribute("username", user.getUserName());  对象类型   reque ...

  3. python对象序列化pickle

    import pickle class A: users = {} c = 1 def get_self(self): return self def n(self): return 1 def pi ...

  4. fabric-ca1.03安装

    前面的文档已经成功的安装了fabric1.0.1的e2e例子.之后代码换成1.0.3版本按步骤重新安装一下,就可以切换到1.0.3了.1.0.3的脚本和启动命令没有变化,还是用的1.0.1的. 1.准 ...

  5. 34.scrapy解决爬虫翻页问题

    这里主要解决的问题: 1.翻页需要找到页面中加载的两个参数. '__VIEWSTATE': '{}'.format(response.meta['data']['__VIEWSTATE']), '__ ...

  6. maven 下载jar失败: Missing artifact javax.jms:jms:jar:1.1

    想从中央仓库下载, 却出现404, 原来,而中央仓库中都只有pom文件, 而没有jar包. 那就换一个 仓库吧: http://repository.jboss.com/maven2/: 终于找到了你 ...

  7. react-native ios 集成 react-native-baidu-map

    自己测试了下,https://www.jianshu.com/p/eceb7e66fa5e?appinstall=0 记录下自己遇到的问题,以及解决方法, 首先新建一个react native项目,然 ...

  8. Spring注解标签详解@Autowired @Qualifier等

    http://blog.csdn.net/wangsr4java/article/details/42777855 @Component.@Repository.@Service.@Controlle ...

  9. 爬虫介绍+Jupyter Notebook

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫    1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...

  10. iOS 申请distribution证书, 公钥,私钥

    私钥只有在本机生成CSR文件的时候会产生,公钥会在CSR文件传给apple时,apple产生.