n log(n)
подразумевает, что алгоритм просматривает все N элементов log (n) раз.Но это не то, что происходит с Quickselect.
Допустим, вы используете Quickselect, чтобы выбрать 8 лучших элементов в списке из 128. И каким-то чудом случайного выбора, выбранные вами опорные точки всегда находятся на полпути.point.
На первой итерации алгоритм просматривает все 128 элементов и разбивает их на две группы по 64 элемента в каждой.Следующая итерация разбивается на две группы по 32 элемента в каждой.Затем 16, а затем 8. Количество проверенных элементов:
N + N/2 + N/4 + N/8 + N/16
Сумма этого ряда никогда не достигнет 2 * N.
В худшем случае разделение всегда приводит кочень перекошенные размеры перегородок.Подумайте, что произойдет, если первое разбиение удалит только один элемент.А второй удалил только один и т. Д. Результат будет:
N + (N-1) + (N-2) ...
Что означает (n^2 + n)/2)
или O(п ^ 2).