This is the Wikipedia Quicksort Algorithm (pseudocode)
function quicksort('array')
if length('array') ≤ 1
return 'array' // an array of zero or one elements is already sorted
select and remove a pivot value 'pivot' from 'array'
create empty lists 'less' and 'greater'
-----------Partition section----------
for each 'x' in 'array'
if 'x' ≤ 'pivot' then append 'x' to 'less'
else append 'x' to 'greater'
-----------End Partition section------
return concatenate(quicksort('less'), 'pivot', quicksort('greater')) // two recursive calls
The Partition section cannot be done concurrently. However, you can execute the recursive calls with multiple threads, i.e.
return concatenate(quicksort('less'), 'pivot', quicksort('greater'))
Becomes
return concatenate(new Thread(quicksort('less')), 'pivot', new Thread(quicksort('greater')))