この種のクイックソートの実装があるとします。これはおそらく標準のものとは少し異なります。
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)
空のリストが返されるだけです。
あれは正しいですか?