名前がソート可能であり、問題を解決するのに十分な数のテープ ドライブがあることが前提です。ペアを (name, next_name) として定義します。ここで、next_name は西にいる人の名前です。ペアのファイルのコピーが別のテープに作成されます。最初のファイルは名前でソートされ、2 番目のファイルは next_name でソートされます。テープ ソートは、ボトムアップ マージ ソート、またはポリフェーズ マージ ソートと呼ばれるより複雑なバリエーションですが、この問題には、標準のボトムアップ マージ ソートで十分です。C++ の場合、std::stable_sort() を使用してテープ ソートをエミュレートできます。比較にはラムダ関数を使用し、最初のファイルは名前でソートし、2 番目のファイルは next_name でソートします。
索引付けの用語では、name[1] を使用して最東端の名前を表し、name[n] を使用して最西端の名前を表します。
ペアの 2 つのファイルを最初に並べ替えた後、解決策では、「ファイルの受け渡し」が姓の 2 番目の名前 name[n-1] を識別するために行われると述べられていますが、その方法は指定されていません。その過程で、name[n] も識別されると仮定します。ファイルは順番に比較され、最初のファイルの name と 2 番目のファイルの next_name が比較されます。不一致は、名の name[1] または姓の name[n] のいずれか、またはまれに両方の場合を示します。不一致が何を示しているかを判断するには、各ファイルの次のペアをチェックする必要があります。姓 name[n] が識別された時点で、2 番目のファイル ペアの名前は姓 name[n-1] の次になります。
name[n-1] と name[n] が分かれば、両方のファイルを使用するマージのような操作が実行され、name[n-1] と name[n] をスキップしてペア (name[i], name[ i+2]) i = 1 から n-2 (名前順) の場合、G は (n-1, x[n-1]) と (n, x[n]) の 2 つのペアを名前に含む順序 (G と G' は、最後のステップまで名前順です)。
F は H にコピーされ、アルゴリズムで説明されているように、2、4、8、... のたびに t が 2 倍になる反復プロセスが実行されます。各パスの後、F' には i = 1 から nt までのペア (x[i]、x[i+t]) が含まれ、G' はソートされ、G とマージされて G' に戻されます。 i = nt から n のペア (i, x[i]) を名前順に並べます。最終的に、すべてのペアは i = 1 から n の G (i, x[i]) に名前順に配置され、次に G がインデックス (ペアの左側の部分) で並べ替えられ、名前が並べ替えられた順序になります。