0

シーケンスのすべての順列を辞書順に出力するプログラムを作成しています。これを行うためのアルゴリズムの一部では、スワップが発生したポイントの後に、すべての数値を昇順で並べ替える必要があります。

ただし、ループ内の最初の 8 回程度の実行でうまく配置されているにもかかわらず、私のバブル ソートは間違った番号を再配置しているようです。ループを実行する必要がある回数に関係していると思いますが、何を解決できませんか?

私の並べ替えが機能しない例を次に示します。

シーケンスは 2-3-4-1 になり、2-3-1-4 のように再配置する必要があります。したがって、3 の後、すべての数字を昇順に並べ替える必要があります。ただし、出力は 2-1-3-4 です。つまり、1 ではなく 2 の後にそれらをすべて再配置しています。

ここに私のソートがあります:

for(int i=newTrueIndex; i < l; i++)
           {
              for(int j=seenCount+1; j < l; j++)
              {
                 if(seq[j-1] > seq[j])
                 {
                    int temp4=seq[j-1];
                    seq[j-1] = seq[j];
                    seq[j] = temp4; 

                 }
              }

           }

この時点で newTrueIndex =1 および seenCount = 1

番号はすべて seq に格納されます。

4

2 に答える 2

0
for(int i=newTrueIndex; i < l; i++){
    for(int j=newTrueIndex; j < i; j++){
        if(seq[i] < seq[j]){
            int temp4 = seq[i];
            seq[i] = seq[j];
            seq[j] = temp4; 
        }
    }
}

これは、昇順でソートするのに役立ちます。

于 2013-08-07T17:46:23.430 に答える