- 论坛徽章:
- 0
|
现在有一个排名榜单的需求,根据用户的积分进行排名,其中用户的积分是经常变化的。
要求:
1、排名结果是实时的,即用户积分变化后,相应的名次也该立即相关变化。
2、可以根据排名查到用户的积分。
3、根据用户信息查到用户的排名。
现在觉得比较困难的地方就是积分变化后,怎么做到高效率的排名变化。
自己想的一个算法,只是无法做到高效率。
算法:
1、用一个一维指针数组(int* A[MAX])来实现用户的排名及根据排名查询用户的信息。数组的下标就是用户的排名,数组元素的值就是用户信息的入口地址。
2、假设需求3已经完成(虽然效率不高),即每个用户的排名已知。
3、用户M的积分有变化,根据其原来排名n,用其新积分跟第n-1,n-2,……,n-i名的积分进行比较,直到找到其最后的新排名n-k。
4、记录原数组第n元素到中间变量,然后执行memmove(&A[n], &A[n-1],k+2)把第n-1到n-k的用户都往下移一个名次,恢复中间变量到第n-k名字实现用户M名次的变化。
5、修改原第n到第n-k用户的名次(这一步需要遍历获取到用户信息地址后,再一个一个修改,如果这中间的用户数多的话,那效率非常低)。
以上算法是对原有数组中用户排名变化,如果有心用户需要新添加到该数据,需要一个一个从头到尾遍历到合适的位置,然后再采用memmove实现各个用户排名的变更。
上面的方面肯定不是好方法,不知大家有没有什么更好的算法。 |
|