一个有意思的排序算法

来源:互联网 发布:软件著作权申请表范文 编辑:程序博客网 时间:2024/06/15 03:42

用户在数据库中存有N张照片(照片是有顺序的),然后用户可以任意调整照片之间的顺序,照这样的话,每一次用户调整某一张照 片的顺序后相应地要想多米诺骨牌一样要影响他后面照片的顺序,这样在数据库中有M张照片的顺序编号都需要去Update,这样的话对数据库的压力太大。比 如第8张照片要移动到第二位,那么第7、6、5、4、3、2都要相应地改变,也就是在数据库中有7条记录需要去Update,代价太大。

最后这个问题是这样巧妙解决的:照片在数据库的编号不是1,2,3……这样连续的自然数,而是使用1024、2*1024、3*1024……这样跳跃的数 字来代表,当再有移动的时候,比如把8*1024移动到第二位也就是1024和2*1024之间的话,只需要在数据库中做一次Update,让 8*1024变成(1024+2*1024)/2,后面的那些编号都可以维持不变。这样数据库的压力就小多了!

当然时间久了后可能某一区段的数据编号太密集,甚至都无法插入了,也就是当插入的时候发现没有位置了,这时候可以让前后两个位置向外围扩张一下。