Strategy: split and rule. Array gets splitted into two parts which will separatly sorted recursively. There are many criteria to split the array:
array[ (left + right) / 2 ]
array[ left ]
array[ right ]
[left, right]
Notes:
void qsort(Array & array, int left, int right)
{
if (left < right)
{
int m = array[(left + right) / 2];
int i = left;
int j = right;
while (i <= j) {
while (array[i] < m) ++i;
while (array[j] > m) --j;
if (i <= j) {
array.swap( i, j );
++i;
--j;
}
}
if (left < j) qsort( array, left, j );
if (i < right) qsort( array, i, right );
}
}
Best case: median splits array in two parts of equal size:
⇒
Worst case: median splits array in two parts of lengths 1
and n-1
(number of recusive calls: )
⇒
Typical case:
⇒