using System.Collections.Generic;
private static IList<ParentChild> parentChildList;
public static void Main()
public static void Sort(IList<ParentChild> pcList)
for(int i = 0; i < pcList.Count; i++)
.LastOrDefault(x => x.ChildId == pcList[i].ParentId);
var iAnc = pcList.IndexOf(ancestor);
System.Console.WriteLine("Moving {0}/{1} to {2}", pcList[i].ParentId, pcList[i].ChildId, iAnc);
pcList.Insert(iAnc+1, pcList[i]);
public static void SetupTestData1()
parentChildList = new List<ParentChild>();
parentChildList.Add(new ParentChild { ParentId = 5, ChildId = 6 });
parentChildList.Add(new ParentChild { ParentId = 1, ChildId = 5 });
parentChildList.Add(new ParentChild { ParentId = 3, ChildId = 4 });
parentChildList.Add(new ParentChild { ParentId = 2, ChildId = 3 });
parentChildList.Add(new ParentChild { ParentId = 1, ChildId = 2 });
public static void SetupTestData2()
parentChildList = new List<ParentChild>();
parentChildList.Add(new ParentChild { ParentId = 3, ChildId = 4 });
parentChildList.Add(new ParentChild { ParentId = 2, ChildId = 3 });
parentChildList.Add(new ParentChild { ParentId = 6, ChildId = 7 });
parentChildList.Add(new ParentChild { ParentId = 5, ChildId = 6 });
parentChildList.Add(new ParentChild { ParentId = 1, ChildId = 5 });
parentChildList.Add(new ParentChild { ParentId = 1, ChildId = 2 });
public static void OutputList()
foreach(var pc in parentChildList)
System.Console.WriteLine("{0}/{1}", pc.ParentId, pc.ChildId);
public int ParentId { get; set; }
public int ChildId { get; set; }