假设您有这种快速排序实现,它可能与标准实现有点不同:
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)
只会返回空列表。
那是对的吗?