function
partition(array, left, right, pivotIndex)
pivotValue := array[pivotIndex]
swap array[pivotIndex] and array[right] // Move pivot to end
storeIndex := left
for
i from
left to
right - 1 // left ≤ i < right
if
array[i] < pivotValue
swap array[i] and array[storeIndex]
storeIndex := storeIndex + 1
swap array[storeIndex] and array[right] // Move pivot to its final place
return
storeIndex
function
quicksort(array, left, right)
if
right > left // subarray of 0 or 1 elements already sorted
select a pivotIndex in the range left ≤ pivotIndex ≤ right // see Choice of pivot
for possible choices
pivotNewIndex := partition(array, left, right, pivotIndex) // element at pivotNewIndex is now at its final position
quicksort(array, left, pivotNewIndex - 1) // recursively sort elements on the left of pivotNewIndex
quicksort(array, pivotNewIndex + 1, right) // recursively sort elements on the right of pivotNewIndex