如何对列表进行排序,以便管理员始终领先于他们的下属(如何在Groovy或FP语言中进行拓扑排序)

时间:2010-03-08 01:23:01

标签: algorithm sorting groovy

我正在使用Groovy开发一个项目,我想接受一系列员工,这样就不会有任何经理在数组中跟随他们的下属。原因是我需要将人员添加到数据库中,我宁愿不要两次通过。

所以,我基本上有:

<employees>
  <employee>
     <employeeid>12</employeeid>
     <manager>3</manager>
  </employee>   
  <employee>
     <employeeid>1</employeeid>
     <manager></manager>
  </employee>   
  <employee>
     <employeeid>3</employeeid>
     <manager>1</manager>
  </employee>   
</employees>

所以,它应该这样排序:

employeeid = 1
employeeid = 3
employeeid = 12

第一个人应该为经理留空。

我正在考虑二叉树表示,但我预计它会非常不平衡,我不确定使用Groovy正确执行此操作的最佳方法。

有没有办法不使用嵌套循环?

1 个答案:

答案 0 :(得分:3)

http://en.wikipedia.org/wiki/Topological_sorting

假设除了CEO之外的每个员工都只有一个经理,我会将所有员工记录插入到一​​个关联结构中,该结构将每个员工ID映射到他们的直接报告列表。现在我们在CEO上调用以下递归程序:

def recursiveinsert(e):
    insert e into the database
    for each direct report d of e:
        recursiveinsert(d)