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