Хотя тот Нелфил Ив Дауст ответил на него хорошо, я хочу добавить комментарий.
С только несортированным массивом, нет другого способа найти минимальное / максимальное значение в сублинейном времени. Поскольку мы не знаем, какой элемент является самым большим или самым маленьким, вы должны просмотреть их все.
Практическое улучшение
Мы можем сделать это быстрее, если мы позволим еще больше операций и места в структуре данных.
Массив пуст
- Вставить (e): установить минимальное / максимальное значения e. O (1)
- Remove (e): вернуть некоторое предопределенное значение. O (1)
- Minimum / Maximum (e): вернуть какое-то предопределенное значение. O (1)
Массив не пустой
- Вставка (e): сравните значение e с минимальным / максимальным. Если условие выполнено, установите для минимума / максимума значение e. O (1)
- Удалить (e): если mininum / максимум == e, то установить минимальный / максимальный как неизвестный (может быть NULL?). Иначе, просто удалите e из массива. O (1)
- Минимум / максимум (e): если минимум / максимум неизвестен, найдите и установите минимум / максимум, используя алгоритм O (N). Если минимум / максимум известен, просто верните его. O (N) или O (1).
Плюсы и минусы
Соотношение операций между Insert / Remove и Minimum / Maximum определяет производительность этого алгоритма.
Если количество операций Minimum / Maximum больше, чем Insert / Remove, вероятностно, этот алгоритм работает быстрее, так как массив становится все больше и больше.