Согласно Википедии, алгоритм выбора имеет время выполнения O(n), но я не уверен в этом. Может ли кто-нибудь объяснить, почему это O(n)?
В обычном быстром сортировке время выполнения - O(n log n). Каждый раз, когда мы разделяем ветвь на две ветки (больше, чем ось вращения и меньше оси), нам нужно продолжить процесс по обеим сторонам ветвей, тогда как алгоритму выбора нужно только обрабатывать одну сторону ветки. Я полностью понимаю эти моменты. Но если вы думаете о бинарном алгоритме поиска, то после того, как мы выбрали средний элемент, мы также продолжаем искать одну сторону ветки. Так делает алгоритм O(1)? Нет, конечно, бинарный алгоритм поиска по-прежнему равен O(log N) вместо O(1). Это то же самое, что и элемент поиска в двоичном дереве поиска. Мы ищем только одну сторону, но мы по-прежнему считаем O(log n) вместо O(1).
Может кто-нибудь объяснить, почему в алгоритме выбора, если мы продолжим поиск одной стороны, можно считать O(1) вместо O(log n)? Для меня я считаю, что алгоритм должен быть O(n log n), O(N) для partitoning и O(log n) для количества раз, чтобы продолжить поиск.