Быстрая сортировка, как и другие алгоритмы сортировки, фокусируется на упорядочении входных элементов в порядке, установленном данным оператором сравнения, но то, что отличает его от других алгоритмов сортировки, заключается не только в разделении и Покоритестратегию, но сама идея вращаться вокруг точки разворота весьма интригует.
Временная сложность и пространственная сложность этого алгоритма составляют O(nlogn) и O(n) соответственно, но пространственная сложность может быть улучшена до O(logn) с помощью простой хвостовой рекурсии.
Эта статья посвящена оптимизацииалгоритма быстрой сортировки, но чтобы узнать больше о быстрой сортировке, нажмите здесь.
Техника:
Чтобы оптимизировать быструю сортировку, чтобы использовать меньше памяти, метод довольно прост.
ИСПОЛЬЗОВАТЬ ХВОСТ РЕКУРСИИ !!
Обычно хвостовая рекурсия не предпочтительна, но в этом случае хвостовая рекурсия сочетается с идеей решения наименьшего раздела в первую очередь, что значительно улучшает пространственную сложность до O (logn) из O(n).
Оптимизированная функция быстрой сортировки
Приведенный выше код быстрой сортировки принимает следующие три аргумента:
i: данные: входная последовательность Int.
ii: start: начальный индекс данной входной последовательности.
iii: end: конечный индекс данной входной последовательности.
Быстрая сортировка обычно реализуется с использованием рекурсии, поэтому основное базовое условие остается неизменным, а именно:
Если начальный индекс больше или равен последнему индексу, то рекурсия завершится и вызов функции будет удален из стека.
Но вводится цикл while, который неоднократно вызывает функцию разделения и рекурсивно вызывает функцию быстрой сортировки, которая имеет наименьший раздел, пока все разделы не будут отсортированы.
Поскольку наименьший раздел всегда сортируется первым, дополнительная память ограничена O(logn).
Java-код
Нажмите, чтобы перейти к исходному коду