I have an array of N numbers which are same.I am applying Quick sort on it. What should be the time complexity of the sorting in this case.
I goggled around this question but did not get the exact explanation.
Any help would be appreciated.
This depends on the implementation of Quicksort. The traditional implementation which partitions into 2 (<
and >=
) sections will have O(n*n)
on identical input. While no swaps will necessarily occur, it will cause n
recursive calls to be made - each of which need to make a comparison with the pivot and n-recursionDepth
elements. i.e. O(n*n)
comparisons need to be made
However there is a simple variant which partitions into 3 sets (<
, =
and >
). This variant has O(n)
performance in this case - instead of choosing the pivot, swapping and then recursing on 0
to pivotIndex-1
and pivotIndex+1
to n
, it will put swap all things equal to the pivot to the 'middle' partition (which in the case of all identical inputs always means swapping with itself i.e. a no-op) meaning the call stack will only be 1 deep in this particular case n comparisons and no swaps occur. I believe this variant has made its way into the standard library on linux at least.