前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于ABAP排序不稳定的问题

关于ABAP排序不稳定的问题

作者头像
Jerry Wang
发布2019-05-31 11:24:57
7470
发布2019-05-31 11:24:57
举报

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1439871

Tuesday, February 16, 2016 11:58 AM

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

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

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

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

优化前:

优化后:

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

问题就出在这个SORT上,发现ABAP里面的SORT是非稳定排序:

同样 SORT KEY的三条数据在排序前的自然顺序:

代码语言:javascript
复制
     SORT之后这三条的顺序:

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

要解决这个问题可以让优化前和优化后的代码都用SORT STABLE,但是SORT STABLE比SORT慢, 而且对于change log来说这个问题造成的不一致是可以接受的,所以暂时不改。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档