Бинарный поиск правой границы c#

Нужно написать эффективную программу бинарного поиска поиска правой границы в упорядоченном массиве. Программа должна удовлетворять условиям: Функция должна быть НЕ рекурсивной и работать за O(log(items.Length)*L), где L — ограничение сверху на длину фразы. Я сделал алгоритм, который не справляется с быстрым решением.

using System;
using System.Collections.Generic;
using System.Linq;

namespace Autocomplete
{
    public class RightBorderTask
    {
        public static int GetRightBorderIndex(IReadOnlyList<string> phrases, string prefix,
            int left, int right)
        {
            for (var i = 0; i < phrases.Count - 1; i++)
            {
                var m = (right + left) / 2;
                if (string.Compare(prefix, phrases[m], StringComparison.OrdinalIgnoreCase) == 0)
                    return m + 1;               
                
                if (string.Compare(prefix, phrases[m], StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    left = m;
                    i = left;
                }
                
                else right = m; 
            }
            
            if (phrases[right - 1] == prefix)
                return right;
            return phrases.Count - 1;
        }
    }
}

Ответы (0 шт):