Tuesday, February 16, 2016 11:58 AM

这是我的同事Ben发现的,我做ABAP开发这么多年都没留意过,惭愧。

首先我们回顾下大学计算机专业课数据结构中讲的,排序的稳定性。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

这两天在做change document优化的时候遇到一个ABAP SORT不稳定性带来的问题:

测试发现优化前和优化后,取到的100多条log里面有一条不一样:
优化前:

优化后:

Debug发现优化前的代码里面对每一个opportunity的log,有一个SORT之后再取前26条的逻辑:

问题就出在这个SORT上,发现ABAP里面的SORT是非稳定排序:
同样 SORT KEY的三条数据在排序前的自然顺序:

     SORT之后这三条的顺序:


刚好这条opportunity对应的log有27条,这三条log在排序之后在最后,所以ESTAT这条被截掉了,如果是稳定排序的话这条不应该被截掉。

要解决这个问题可以让优化前和优化后的代码都用SORT STABLE,但是SORT STABLE比SORT慢, 而且对于change log来说这个问题造成的不一致是可以接受的,所以暂时不改。要获取更多Jerry的原创文章,请关注公众号"汪子熙":

关于ABAP排序不稳定的问题相关推荐

  1. java选择排序不稳定_选择排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...

    选择排序就这么简单 从上一篇已经讲解了冒泡排序了,本章主要讲解的是选择排序,希望大家看完能够理解并手写出选择排序的代码,然后就通过面试了!如果我写得有错误的地方也请大家在评论下指出. 选择排序介绍和稳 ...

  2. 希尔排序不稳定例子_Python实现希尔排序(已编程实现)

    作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/65334039 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 观察一下" ...

  3. mysql 排序速度_MySQL排序速度慢而且可能不稳定

    一.具体现象 有一个功能,按照算法得出的权重值,分页展示一批列表数据,权重值越大越靠前.研发同学反馈查询速度慢且排序不稳定. 排序不稳定的具体现象,有不少记录存在相同权重值,某条记录(假设id=100 ...

  4. 不稳定的排序-选择排序

    前言 选择排序是直观的排序,通过确定一个最大或最小值,再从待排序的的数中找出最大或最小的交换到对应位置.再选择次之.双重循环时间复杂度为 O(n^2).简单选择排序是不稳定排序. 算法性能 时间复杂度 ...

  5. python数据结构与算法:排序算法(面试经验总结)

    快排:最优复杂度 O(n*logn) 最坏时间复杂度O(n^2)平均时间复杂度n^(1.3) 归并排序:最优/平均/最坏  时间复杂度均O(nlogn),但是内存占用为list大小的两倍,算法稳定 # ...

  6. 在遗传算法中出现等式约束_排序算法中的稳定性-等式的处理

    在遗传算法中出现等式约束 by Onel Harrison 通过Onel Harrison 排序算法中的稳定性-等式的处理 (Stability in Sorting Algorithms - A T ...

  7. 先随机后排序的oracle,Oracle用decode函数或CASE-WHEN实现自定义排序

    Oracle用decode函数或CASE-WHEN实现自定义排序 1 问题 对SQL排序,只要在order by后面加字段就可以了,可以通过加desc或asc来选择降序或升序.但排序规则是默认的,数字 ...

  8. 在SAP BW中使用ABAP

    前言 本文的目的是讲述如何在BW中使用ABAP编程.在每一个项目中,正确使用ABAP编程会对正确的业务建模起到积极作用.在设计和蓝图阶段,一个核心的功能流程是类比于如何在BW中完成类似于R3中的业务流 ...

  9. java实现八种排序算法并测试速度(详细)

    算法代码: /*** Created by CLY on 2017/3/17.*/ package pers.cly.sorting; /*** 排序工具类,里面包含各种排序方法*/ public c ...

最新文章

  1. 美团架构师开源5万字的《Java面试手册》PDF免费下载!
  2. 神经科学家发现神经元网络可以拉伸或压缩其活动以控制时间
  3. 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯
  4. 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题
  5. [C++STL]C++ 实现map容器和set容器
  6. Linux(14)-正则表达式
  7. UI:target-action设计模式、手势识别器
  8. 怎么调用anaconda安装的pip_对于学python的小伙伴来到底该不该安装andconda
  9. 秒杀的倒计时按钮实现
  10. Java开发中的一些概念
  11. 挑战程序竞赛系列(22):3.2弹性碰撞
  12. 关于sip软电话嵌入到网页web端的学习----第一天(2)(高手指点)遇到问题了jssip
  13. multiparty 和 busboy
  14. USACO 1.1.2 - Greedy Gift Givers(模拟)
  15. CH340G的RTS#和DTR#引脚输出
  16. Win8调整笔记本亮度,数值有变化但无效果
  17. D2x神符之语中英文对照图文豪华版
  18. 【奔腾的骏马---Html+CSS实现(附源代码)】
  19. LaTex笔记:参考文献、常用公式符号、图表、注释
  20. Swift调用摄像头之权限判断

热门文章

  1. Record of redevelopment of website
  2. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
  3. 《终身成长》读书笔记(part1)--杰出的人有着一种能够准确评估自己的能力和不足的独特才能
  4. php fopen 找不着文件,fopen 系统找不到指定路径 PHP文件包含详细讲述(4)
  5. 2020春招机考汇总1(Python):农场养鸡、连续子序列最大值的期望
  6. Docker 实战教程之从入门到提高 (四)
  7. 云原生应用程序运行时 Kyma 的主要特性介绍
  8. 如何创建 Angular library 并在生产环境中消费
  9. SAP 电商云 Spartacus UI 如何自定义 SeoMetaService
  10. env-cmd is not recognized as an internal or external command