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