/// <summary>
 /// Фаза разделения, разделяем данный на два файла по сортированным фазам длинной step
 /// </summary>
 /// <param name="reader">Источник</param>
 /// <param name="writerOne">Первый получатель</param>
 /// <param name="writerTwo">Второй получатель</param>
 /// <param name="step">Длина сортированной фазы</param>
 private void Devision <TInnerType>(IExternalReader <TInnerType> reader, IExternalWriter <TInnerType> writerOne,
                                    IExternalWriter <TInnerType> writerTwo, long step)
     where TInnerType : class, IComparable
 {
     while (reader.IsNext())
     {
         writerOne.Write(reader.Current);
         for (long i = 1; (i < step) && reader.IsNext(); i++)
         {
             writerOne.Write(reader.Current);
         }
         for (long i = 0; (i < step) && reader.IsNext(); i++)
         {
             writerTwo.Write(reader.Current);
         }
     }
 }
        private TInnerType ReadNextStudentInPhase <TInnerType>(long step, IExternalReader <TInnerType> reader,
                                                               TInnerType currentStudent)
            where TInnerType : class, IComparable
        {
            if (step <= 0)
            {
                return(null);
            }

            if (currentStudent != null)
            {
                return(currentStudent);
            }

            return(reader.IsNext() ? reader.Current : null);
        }