类别进行排序的一个简单分析

拖拉排序的算法

我们做一些系统的时候需要会需要让用户对某个 产品和 类别进行排序。



这时候我们就需要把哪个实体加一个叫做DisplayOrder的属性了

上升和下降的话只要求 把两个DisplayOrder对换一下就行了。

但是拖拉的话是不一样,就不能是简单的交换了而是需要将 DisplayOrder插入到前面

例如我们有
Name        DisplayOrder

A             1
B             2
C             3
D             4
E             5
F             6
G             7

我们要将G拉到C前,我们就必须把 G的DisplayOrder设成C

然后把 C的设成D的,把D的设成E的,E的设成F的 F的设成G的。
但是这样的效率是比较差的。特别是在sql当中如果这样写的话可能会比较麻烦的。

因为DisplayOrder至少都是相差为1我们可以用一个更简单的方式来实现它

就是把 C和它后面的所有DisplayOrder全部+1但是这样的算法效率似乎还不是最好的。
因为如果是一个比较远距离的拖动我们就得更改好多项了。

一个更好的方式是 DisplayOrder 相差的值不是为1。这样就可以在某些程度下做到当把G的DisplayOrder设成c的。 而C+1不会跟D重复。从而降低更新。

原文地址:https://www.cnblogs.com/lovebanyi/p/2055725.html