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