shakerSort(A, N):
left ← 0
right ← N-1
while True:
// 从前方开始的交换处理
last ← left
for j ← left+1 to right:
if A[j-1] > A[j]:
swap(A[j-1], A[j])
last ← j - 1 // 更新最后进行交换的位置
right ← last; // 缩小后方未排序的区域
if left = right: break
// 从后方开始的交换处理
last ← right
for j ← right downto left+1:
if A[j-1] > A[j]:
swap(A[j-1], A[j])
last ← j // 更新最后进行交换的位置
left ← last; // 缩小前方未排序的区域
if left = right: break