Quicksort Algorithm
Quicksort Algorithm
Quick Sort
40 20 10 80 60 50 7 30 100
Partitioning Array
• Given a pivot, partition the elements of the array
such that the resulting array consists of:
1. One sub-array that contains elements >= pivot
2. Another sub-array that contains elements < pivot
• The sub-arrays are stored in the original data
array.
• Partitioning loops through, swapping elements
below/above pivot.
Quicksort: Example
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
pivot_index = 0 40 20 10 80 60 50 7 30 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 60 50 7 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
pivot_index = 0 40 20 10 30 7 50 60 80 100
left right
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
5. Swap data[right] and data[pivot_index]
pivot_index = 0 40 20 10 30 7 50 60 80 100
right left
Quicksort: Example
1. While data[left] <= data[pivot]
++left
2. While data[right] > data[pivot]
--right
3. If left < right
swap data[left] and data[right]
4. While right> left, go to 1.
5. Swap data[right] and data[pivot_index]
pivot_index = 4 7 20 10 30 40 50 60 80 100
left right
Quicksort: Example
7 20 10 30 40 50 60 80 100
7 20 10 30 40 50 60 80 100
T (n) T (k ) T (n k 1) n)
• For average case, we can assume that k≈n/2.
• The complexity of quick-sort now reduces to