Допустим, у вас такой реализации быстрой сортировки, который, вероятно, немного отличается от стандартного:Лучший случай изменения быстрой сортировки
qsort(list):
if list is of length 1 or lower -
return list
else -
choose a random pivot
smaller - get all elements that are smaller than the pivot
equal - get all elements that are equal to the pivot, including the pivot itself
greater - get all elements that are greater than the pivot
return qsort(smaller) + equal + qsort(greater)
не самый лучший вариант развития событий для этой функции быть бы когда функция получает список, в котором все элементы одинаковы, и в этом случае наилучшая временная сложность будет равна O(n)
, что лучше, чем наилучшая временная сложность стандартной версии быстрого сортировки, которая равна O(n log n)
?
Аргументации для этого является то, что функция создает только те разделы, один раз, поскольку меньшие и большие списки будут пустыми (как все элементы одинаковы), и это положит конец рекурсии, так как qsort(smaller)
и qsort(greater)
бы просто верните пустые списки.
Верно ли это?
У меня было ощущение, что этот вариант qsort может иметь более низкое пространство, чем стандартное, поэтому я, вероятно, не буду его использовать, я просто хотел убедиться, что наилучшая временная сложность этого варианта была действительно, O (n). Большое спасибо! – Master