用于对表中的行进行排序的键分配方案

时间:2011-05-03 19:37:50

标签: algorithm sorting

我正在寻找一种方案,用于为表中的行分配键,这样可以在表中移动行并在表中分配新位置,而无需重新编号整个表。

类似于拥有键1,2,3,4,然后移动行" 2"介于3和4之间,然后将其重命名为" 3.5" (所以你最终得到1,3,3.5,4)。但该计划需要无限制地#34;可扩展的(允许至少几千"随机"行移动通常需要"标准化"关键,以及最坏(最病态)的情况允许25-50这样的移动)。

生成的密钥应该很容易分类,理想情况下,我希望它们能够自然而然地“#34;为数据库(假设SQLite)查询命令。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

从概念上讲,您可以将表视为链表。创建一个具有唯一ID,密钥及其下一个节点以及您想要的任何其他数据的表。只需按顺序插入项目,当您需要在其间放置新项目时,只需交换键值和关联的父节点即可。键值不会保持一致,但这就是附加唯一ID的用途,这也适用于按键排序。

实际上,由于您已经通过密钥指定了订单,因此您甚至不需要“下一个节点”。只要您重命名其他节点的键以及您移动的其他节点的键,上述方案应该没问题 - 即2和3交换其键值。

答案 1 :(得分:0)

当一个人在line numbering中编写代码时,这个问题让我想起BASIC问题。在这种情况下,大多数人所做的是对两条线之间插入的线数进行有根据的猜测。那个猜测就是那些线之间的间距。因此,如果您认为两个元素之间可能有2000个插入,那么您可能会使element1具有2000的键,并且使element2具有4000的键。然后我们要在element1或element2之间放置一个元素,您要么天真地分割差异(3000)或者如果你对element3的每一侧有多少元素有一些直觉,那么你可能会对它进行一些加权(即3500而不是3000)。

另一个替代方案(它实际上只是相同的东西,但你使用的是不同的编号系统)是使用浮点数,我相信你不会这样。 1到2之间是1.5。在1.5和2之间将是1.75。在1.5和1.75之间将是1.625等。

我建议不要使用字符串键。最好坚持使用数字键,最重要的是,如果可以帮助它,最好使用整数类型键而不是浮点类型键。