Вы можете просто создать новый промежуток времени с днями, установленными на 0.
ts = new TimeSpan(0, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);
Это называют топологическая сортировка .
стандартный алгоритм должен произвести минимальный элемент, затем удалить его и повторение, пока не сделано.
Сделайте несколько видов. Первый вид согласно первому правилу, затем согласно второму и так далее. Должен работать, если Ваши правила не содержат противоречия. уверенный достаточно легкий реализовать.
Вы могли неоднократно называть make_heap, pop_heap в C++ с последовательностью под рукой.