关于ABAP排序不稳定的问题

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog.csdn.net/article/details/85845478

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来说这个问题造成的不一致是可以接受的,所以暂时不改。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券