Пример #1
0
        //Определение порядка run'a и его поиск через метод FindRun
        //Возвращает длину run'а и его порядок сортировки
        private int RunFragmentation(out RunOrder runOrder)
        {
            if (currentIndex >= arr.Length - 1) //Если остался один элемент в массиве, то вернуть размер равный 1
            {
                currentIndex++;
                runOrder = RunOrder.LowerOrEqual;
                return(1);
            }

            runOrder = arr[currentIndex].CompareTo(arr[currentIndex + 1]) <= 0 ? RunOrder.LowerOrEqual : RunOrder.Higher;

            int runSize = FindRun(runOrder);

            return(runSize);
        }
Пример #2
0
        //Поиск run'a в определенном упорядоченной последовательности
        //Возвращает длину run'a
        private int FindRun(RunOrder runOrder)
        {
            currentIndex++;
            int  runSize = 2;
            bool isWorks = true;

            do
            {
                if (currentIndex + 1 < arr.Length &&
                    (arr[currentIndex].CompareTo(arr[currentIndex + 1]) <= 0 && runOrder == RunOrder.LowerOrEqual ||
                     arr[currentIndex].CompareTo(arr[currentIndex + 1]) > 0 && runOrder == RunOrder.Higher)
                    )
                {
                    runSize++;
                }
                else
                {
                    isWorks = false;
                }
                currentIndex++;
            } while (isWorks);
            return(runSize);
        }