当我同时重新排序多个项目时,我确实遇到了问题,让我用这个例子更清楚地说明问题:
如果我最初有这张桌子:
据说我想把A和B排在第4和第5位,我应该期待一个看起来像这样的结果:
然而,我绝对不知道我将如何系统地做到这一点。最初我尝试通过一次考虑改变来重新排序它们。
我的算法是:
1)如果一个项目的等级要降低:
调整所需等级以上的所有其他项目,将其等级提高1,直到达到原始项目的等级。因此,假设我想将 D 从等级4移动到2。
我将向上移动B和C,直到D的原始等级被填满。然后我更新D的等级。
2)如果要将某个项目的等级提高,请执行相反的操作。
问题:
如果我使用这个算法将A和B分别排在第4和第5位,那么这里将会发生什么:
这是错误的。因为当然错误的算法。我最初移动A, A 获得排名4 ,但由于我只是逐个调整,所以当我尝试时, A 也会被移动重新排名 B
问题:
什么是同时重新排序多个项目的最佳算法?并保持受影响项目的排名顺序?我在php btw编码,所以如果你能提供一个示例代码就会非常棒,但算法就足够了。
修改:
我在下面添加了3个示例来演示所需的动作:
1)#1案例:将 C移至2 , B移至4 :
2)#2案例:将 E移至1 ,将 A移至4。
3)#last例子,这里只是简单地将A移动到5。 - 调整所有其他人。
答案 0 :(得分:1)
就个人而言,我会创建一个堆栈作为临时持有者。首先推入排名最低的值(B),然后下一个(A)然后推送其他项目从下到上。在此之后将堆栈推回到列表中,首先从新的最高等级开始(C,D,E,A,B)。但是,如果您的项目列表很大,则可能需要相当大的处理能力,因此可能不是最佳解决方案。