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