これらのアルゴリズムのそれぞれを実装するには、さまざまな方法があり、実装ごとに空間の複雑さが異なることに注意してください。
マージソートから始めましょう。配列上のmergesortの最も一般的な実装は、個々の範囲のマージを実行する外部バッファを割り当てることによって機能します。これには、配列のすべての要素を保持するためのスペースが必要です。余分なスペースを必要としますΘ(n)。しかし、代わりに、各マージに対してインプレースマージを使用することができます。つまり、必要な余分なスペースは、再帰呼び出しのスタックフレームのスペースとなり、スペースの複雑さはΘ(log n)になります。アルゴリズムの実行時間を大きな一定の係数で増加させます。代わりに、O(1)余分なスペースしか必要としませんが、より高い定数を持つインプレースマージを使用して、ボトムアップのマージソートを実行できます。
一方、リンクされたリストをマージする場合、スペースの複雑さはかなり異なることになります。要素自体が簡単に再配線できるので、リンクされたリストを空間O(1)にマージできます。これは、再帰呼び出しのスタックフレームを格納するために必要な領域から、マージソートリンクリストの領域の複雑さがΘ(log n)であることを意味します。
別の例としてクイックソートを見てみましょう。 Quicksortは通常外部メモリを割り当てませんが、使用するスタックフレームにはスペースが必要です。ピボットが常に配列の最大要素または最小要素になる場合、クイックソートの素朴な実装では、スタックフレームの最悪の場合にはスペースΘ(n)が必要になることがあります。この場合、サイズnの配列 - 1、n - 2、n - 3などがあります。ただし、基本的にテールコール除去という標準的な最適化があります。つまり、配列の2つの半分の小さい方の部分で再帰的にquicksortを呼び出し、より大きな半分の現在の呼び出し。つまり、サイズが最大n/2、次にn/4、n/8などのサブアレイで再帰呼び出しに新しいメモリを割り当てるだけなので、領域使用量はO(log n)に減少します。