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