Как я могу обновить этот алгоритм для поиска n-го наименьшего элемента - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть алгоритм для поиска n-го наименьшего элемента, но этот алгоритм работает не так быстро, как я хочу.Как я могу обновить этот алгоритм?Этот алгоритм принимает несортированный список, начальный индекс, конечный индекс и n-й элемент, который вы хотите найти.

public static void NthElement<T>(List<T> list, int startIndex, int nthSmallest,
    int endIndex)
{
    while (startIndex < endIndex)
    {
        int left = startIndex;
        int right = endIndex;
        T mid = list[(left + right) / 2];
        while (left < right)
        {
            if (Comparer<T>.Default.Compare(list[left], mid) > -1)
            {
                T tmp = list[right];
                list[right] = list[left];
                list[left] = tmp;
                right--;
            }
            else
            {
                left++;
            }
        }

        if (Comparer<T>.Default.Compare(list[left], mid) > 0)
        {
            left--;
        }

        if (nthSmallest <= left)
        {
            endIndex = left;
        }
        else
        {
            startIndex = left + 1;
        }
    }
}

1 Ответ

0 голосов
/ 23 сентября 2019

Попробуйте это:

        public static T NthElement<T>(List<T> list, int startIndex, int nthSmallest, int endIndex)
        {
            List<T> sublist = list.GetRange(startIndex, endIndex - startIndex);
            sublist.Sort();

            return sublist[nthSmallest - 1];
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...