Quicksort Advantages
•
Good performance
•
Variation (Dual Pivot Quicksort) is typically
the fastest sorting algorithm
Quicksort Disadvantages
•
Unstable
– (we will learn what a stable sort is later)
•
Poor worst case performance
Quicksort Code
Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
2 8 5 1 3 4 6
8 5 1 3 4 6 Pivot = 2
Position 1 = 0, Value = 2 Position 2 = 6, Value = 6
Since 6 is not <= 2
Decrement position 2 Min position = 0
8 5 1 3 4 6 Pivot = 2
Position 1 = 0, Value = 2 Position 2 = 5, Value = 4
Since 4 is not <= 2
Decrement position 2 Min position = 0
8 5 1 3 4 6 Pivot = 2
Position 1 = 0, Value = 2 Position 2 = 3, Value = 3
Since 3 is not <= 2
Decrement position 2 Min position = 0
8 5 1 3 4 6 Pivot = 2
Position 1 = 0, Value = 2 Position 2 = 3, Value = 1
Since 1 <= 2
Move 1 into position 1 Min position = 0
1 8 5 3 4 6 Pivot = 2
Position 1 = 1, Value = 8
Position 2 = 3, Value = 1
Increment position 1 Switch swap criteria Switch to position 1 Min position = 0
1 8 5 3 4 6 Pivot = 2
Position 1 = 1, Value = 8
Position 2 = 3, Value = 1
Since 8 > 2
Move 8 into position 2 Min position = 0
1 5 8 3 4 6 Pivot = 2
Position 1 = 1, Value = 8 Position 2 = 2, Value = 5
Decrement position 2 Switch swap criteria Switch to position 2 Min position = 0
1 5 8 3 4 6 Pivot = 2
Position 1 = 1, Value = 8 Position 2 = 2, Value = 5
Min position = 0
Max position = 6 Swap if value <= pivot
Since 5 is not <= 2
1 2 5 8 3 4 6 Pivot = 2
Position 1 = 1, Value = 2 Position 2 = 2, Value = 2
Min position = 0
Max position = 6 Swap if value <= pivot
Since position 1 = position 2 Place pivot
Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
2 8 5 1 3 4 6
<= 2 2
Pivot = 1
Position 1 = 0, Value = 1 Position 2 = 0, Value = 1
Min position = 0
Max position = 0 Swap if value <= pivot
1 2 5 8 3 4 6
Since position 1 = position 2 Place pivot
Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
2 8 5 1 3 4 6
<= 2 2
1 2 5 8 3 4 6 > 2
Pivot = 5
Position 1 = 2, Value = 5 Position 2 = 6, Value = 6
Min position = 2
Max position = 6 Swap if value <= pivot
1 2 8 3 4 6
Since 6 is not <= 5
Pivot = 5
Position 1 = 2, Value = 5 Position 2 = 5, Value = 4
Min position = 2
Max position = 6 Swap if value <= pivot
1 2 8 3 4 6
Since 4 <= 5
Pivot = 5
Position 1 = 3, Value = 8
Position 2 = 5, Value = 4 Min position = 2
Max position = 6 Swap if value > pivot
1 2 4 8 3 6
Pivot = 5
Position 1 = 3, Value = 8
Position 2 = 5, Value = 4 Min position = 2
Max position = 6 Swap if value > pivot
1 2 4 8 3 6
Since 8 > 5
Pivot = 5
Position 1 = 3, Value = 8 Position 2 = 4, Value = 3
Min position = 2
Max position = 6 Swap if value <= pivot
1 2 4 3 8 6
Pivot = 5
Position 1 = 3, Value = 8 Position 2 = 4, Value = 3
Min position = 2
Max position = 6 Swap if value <= pivot
1 2 4 3 8 6
Since 3 <= 5
Pivot = 5
Position 1 = 4, Value = 3
Position 2 = 4, Value = 3 Min position = 2
Max position = 6 Swap if value > pivot
1 2 4 3 8 6
Pivot = 5
Position 1 = 4, Value = 5 Position 2 = 4, Value = 5
Min position = 2
Max position = 6 Swap if value > pivot
1 2 4 3 5 8 6
2 8 5 1 3 4 6 Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
<= 2
> 5 2
1 2 5 8 3 4 6
<= 5 5 > 2
4 3 5 8 6
Pivot = 4
Position 1 = 2, Value = 4 Position 2 = 3, Value = 3
Min position = 2
Max position = 3 Swap if value <= pivot
1 2 3 5 8 6
Since 3 <= 4
Pivot = 4
Position 1 = 2, Value = 3
Position 2 = 3, Value = 3 Min position = 2
Max position = 3 Swap if value > pivot
1 2 3 5 8 6
Pivot = 4
Position 1 = 2, Value = 3 Position 2 = 3, Value = 3
Min position = 2
Max position = 3 Swap if value > pivot
1 2 3 4 5 8 6
2 8 5 1 3 4 6 Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
<= 2
> 5 2
1 2 5 8 3 4 6
<= 5 5 > 2
4 3 5 8 6
Pivot = 3
Position 1 = 2, Value = 3 Position 2 = 2, Value = 3
Min position = 2
Max position = 2 Swap if value <= pivot
1 2 3 4 5 8 6
2 8 5 1 3 4 6 Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
<= 2
> 5 2
1 2 5 8 3 4 6
<= 5 5 > 2
4 3 5 8 6
Pivot = 8
Position 1 = 5, Value = 8 Position 2 = 6, Value = 6
Min position = 5
Max position = 6 Swap if value <= pivot
1 2 4 3 5 6
Since 6 <= 8
Pivot = 8
Position 1 = 6, Value = 6
Position 2 = 6, Value = 6 Min position = 5
Max position = 6 Swap if value > pivot
1 2 4 3 5 6
Pivot = 8
Position 1 = 6, Value = 8 Position 2 = 6, Value = 8
Min position = 5
Max position = 6 Swap if value > pivot
1 2 4 3 5 6 8
2 8 5 1 3 4 6 Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
<= 2
> 5 2
1 2 5 8 3 4 6
<= 5 5 > 2
4 3 5 8 6
Pivot = 6
Position 1 = 5, Value = 6 Position 2 = 5, Value = 6
Min position = 5
Max position = 5 Swap if value <= pivot
1 2 3 4 5 6 8
2 8 5 1 3 4 6 Choose first element as pivot
Break list into two sub lists (<= pivot and > pivot)
<= 2
> 5 2
1 2 5 8 3 4 6
<= 5 5 > 2
4 3 5 8 6