I suggest a new pseudo-code.
quicksort(A, i, k)
if i < k
p := partition(A, i, k)
quicksort(A, i, p - 1)
quicksort(A, p + 1, k)
partition(array, left, right)
hole := choosePivot(Array, left, right)
pivot := array[hole] // save
array[hole] := array[right]
hole := right
while left < hole
if array[left] > pivot
array[hole] := array[left]
hole := left
while right > hole
if array[right] < pivot
array[hole] := array[right]
hole := right
right := right - 1
left := left + 1
array[hole] := pivot // restore
return hole
Performance comparison is difficult, because it depends on some factors.