フィッシャー–イェーツのシャッフル
つまり、1024ビットの初期値を生成できる疑似乱数生成器であっても、シード値が32ビットであれば、 2 通りの独立した順列の組み合わせしか取得することはできない。しかし、初期化と順列の生成の間に、 2通りの乱数をあらかじめ生成し、それをシードとすることによって、とても非効率ではあるが、乱数の組み合わせを増やすことができる。それでも、取得可能な組み合わせは 2 通りにすぎない。
単純な線形合同法による疑似乱数生成器で、上記の「剰余を取得する」方法を使用する場合には特に注意が必要である。線形合同法による乱数生成は、上位ビットと比較すると下位ビットは乱数として劣っている。なぜなら、生成される乱数の下位 n ビットは 2 の周期を持つからである。特に2のべき乗で割って余りを取得する場合、上位ビットを切り捨てることを意味し、そのような数値は乱数としては明らかに使えない。これは質の悪い乱数生成器を使用すれば、質の悪いシャッフルしかできないということを示すよい例である。
長さ n の一様に分布された円順列を生成するアルゴリズムがサンドラ・サットロによって1986年に発表された。ダステンフェルドとサットロのアルゴリズムの違いはたった一つである。上記の手順2において、ランダムな数字 j を取得する場合に、その範囲を1以上 i − 1 以下にするだけである(もとの範囲は1以上 i 以下)。この単純な変更によって、結果の順列は常に円順列を構成するようになる。
後述するとおり、フィッシャー–イェーツのシャッフルを実装しようとした場合に、「意図せず」サットロのアルゴリズムを実装してしまうことも多い。この場合は、n!通りのすべての順列のパターンではなく、(n − 1)! 通りのパターンから取得してしまうため、結果に偏りが生じてしまう。
サットロのアルゴリズムが常に正しく長さ n の円順列のひとつを生成することは、以下のように帰納的に説明できる。ループの1回目が終了したあとに、残りのループが n − 1 個の要素からなる循環を生成するならば、生成された順列は長さ n の円順列のひとつとなる。循環とは、開始した位置の要素を位置 p へ移動し、位置 p にあった要素は新しい場所へ移動し、以後すべての要素が他の場所へと移動した後に、最後の要素が開始した位置へ戻ることを意味する。
フィッシャー–イェーツのシャッフルを実装する場合、アルゴリズム自身の実装および、組み込む乱数の生成方法の両方に注意する必要がある。そうしない場合、結果には検出可能な偏りがあらわれるだろう。以下は偏りが生じる場合の代表的な要因である。