временная сложность вставки массива

я пишу функцию, чтобы найти позицию, в которую целевое значение должно быть вставлено в данный массив. Мы предполагаем, что массив имеет различные значения и отсортирован по возрастанию.

здесь я хочу, чтобы временная сложность была O (logN).

public static int FindPosition(int[] Arr, int element)
{
    int i; int u=0;
    {
        for(i=0;i<Arr.length;i++)
        {
            if(element>Arr[i])
            u++;
        }
    }
    return u;
}

имеет ли эта программа временную сложность O (log n). может ли кто-нибудь помочь мне с изменениями в функции, чтобы она могла быть в o (log n).


person user7799918    schedule 20.04.2017    source источник
comment
Это О(н). Вам нужен бинарный поиск. Это линейный поиск. И вы можете остановить цикл, как только элемент ‹= Arr[i].   -  person xiaofeng.li    schedule 20.04.2017
comment
предположим, что вы ссылаетесь на этот сообщение, чтобы понять, как рассчитать временную сложность.   -  person Rajith Pemabandu    schedule 20.04.2017


Ответы (1)


No.

Этот код перебирает (в худшем случае) все значения в массиве. Если значения вставляются случайным образом, точка вставки будет в среднем находиться в середине массива. Вы не break выполняете цикл, когда находите местоположение, как указывает @LukeLee, поэтому вы всегда будете перебирать все возможные местоположения - все N из них.

Чтобы достичь производительности O(logN), вам придется пропустить множество сравнений. Посмотрите на бинарный поиск, если ваш массив упорядочен.

person aghast    schedule 20.04.2017
comment
К сожалению, код перебирает все элементы, несмотря ни на что. - person xiaofeng.li; 20.04.2017