Pseudocode
n ← length of array
k ← smallest power of two, k ≥ n
for k/2 ≥ p ≥ 1, p in k/2, k/4, k/8, … 4, 2, 1 do
(these comparisons can all be done in parallel)
for 0 ≤ a < n, a in 0, p*2, p*4, p*6, p*8, p*10, … do
for 0 ≤ b < p, b in 0, 1, 2, … p-3, p-2, p-1 do
i ← a + b
j ← a + b + p
if j < n then compare and swap elements i and j end if
for k/2 ≥ q ≥ p*2, q in k/2, k/4, k/8, … p*8, p*4, p*2 do
(these comparisons can all be done in parallel)
for 0 ≤ c < n, c in 0, p*2, p*4, p*6, p*8, p*10, … do
for 0 ≤ d < p, d in 0, 1, 2, … p-3, p-2, p-1 do
i ← c + d + p
j ← c + d + q
if j < n then compare and swap elements i and j end if
repeat q
repeat p