Нет, это не обязательно O (n log n) .
Сначала рассмотрим сам процесс рекурсии: какова наихудшая (по умолчанию интерпретация «сложности») позициярешение о разделении? Если данный массив отсортирован, то максимальный элемент всегда находится в конце, и ваша рекурсия вырождается в процесс удаления одного элемента на каждой итерации.
Во-вторых, рассмотрим сложность одного проходачерез функцию, рекурсия в сторону. Какова сложность каждой операции в вашей последовательности?
- find
max
списка - find элемент в списке
- constructузел
- список фрагментов
- функция все
- список фрагментов
- вызов функции
- назначение
- назначение
- возврат корневого узла
Многие из них O (1) операций, но некоторые из них O (n) - где n
это длина текущего списка, а не оригинала.
Thisв худшем случае O (n ^ 2) .Наилучший случай - O (n log n) , как вы интуитивно понимаете, учитывая идеально сбалансированное дерево в качестве входных данных.Средний случай ... вам, вероятно, это больше не нужно, но это O (n log n) с менее благоприятными константами.