Ответ
Сложность поиска по массиву зависит от его состояния и используемого алгоритма.
| Состояние массива | Алгоритм поиска | Сложность (Big O) | Примечание |
|---|---|---|---|
| Неотсортированный | Линейный поиск (последовательный перебор) | O(n) | В худшем случае необходимо проверить все n элементов. |
| Отсортированный | Бинарный поиск (деление пополам) | O(log n) | Требует предварительной сортировки массива. |
Примеры на C#:
// 1. Линейный поиск в неотсортированном массиве (O(n))
int[] numbers = { 42, 7, 15, 99, 3 };
int target = 15;
bool foundLinear = Array.Exists(numbers, element => element == target); // Или цикл for
// 2. Бинарный поиск в отсортированном массиве (O(log n))
int[] sortedNumbers = { 3, 7, 15, 42, 99 };
int index = Array.BinarySearch(sortedNumbers, target);
bool foundBinary = index >= 0;
// 3. Использование HashSet для константного времени поиска (O(1) в среднем)
// Идеально для частых проверок на существование элемента.
HashSet<int> numberSet = new HashSet<int> { 42, 7, 15, 99, 3 };
bool foundInSet = numberSet.Contains(target); // ~O(1)
Вывод: Для частых операций поиска в больших коллекциях неотсортированный массив — плохой выбор. Следует использовать отсортированный массив с бинарным поиском, HashSet<T> для проверки наличия или Dictionary<TKey, TValue> для поиска по ключу.