using System.Collections.Generic;
public int idx { get; set; }
public string id { get; set; }
public string parent { get; set; }
public string subprocces { get; set; }
public override string ToString() {
return $"{idx} - {id} - {parent} - {subprocces}";
private static IEnumerable<Wiporder> QuickSort( IEnumerable<Wiporder> i ) {
var p = (i.First().idx + i.Last().idx) / 2;
return QuickSort(i.Where(x => x.idx < p)).Concat(i.Where(x => x.idx == p).Concat(QuickSort(i.Where(x => x.idx > p))));
public static void Main()
var list = new List<Wiporder>();
list.Add(new Wiporder { idx = 0, id = "01", parent = "", subprocces = "sm" } );
list.Add(new Wiporder { idx = 2, id = "03", parent = "02", subprocces = "sm" } );
list.Add(new Wiporder { idx = 1, id = "02", parent = "01", subprocces = "sm" } );
list.Add(new Wiporder { idx = 3, id = "101", parent = "03", subprocces = "hm" } );
list.Add(new Wiporder { idx = 4, id = "102", parent = "101", subprocces = "hm" } );
var b = QuickSort(list.ToList());
Console.WriteLine("Before\n-----------");
list.ForEach(x => Console.WriteLine(x));
Console.WriteLine("After\n-----------");
b.ToList().ForEach(x => Console.WriteLine(x));