2009-08-22 8 views
0
#include<stdio.h> 
#include<conio.h> 
main() 
{ 
int i,j,k,x,y,n=4,a[]={1,2,3,4}; //n is the length of the array 
for(i=0;i<n;i++) 
{ 
    for(k=0;k<(n-2);k++) 
    { 
    for(j=(n-1-k);j>=1;j--) 
    { 
     y=a[j]; 
     a[j]=a[j-1]; 
     a[j-1]=y; 
     for(x=0;x<n;x++) 
     { 
     printf("%d",a[x]); 
     } 
     printf("\t"); 
    } 
    } 
} 
getch(); 
} 
+2

あなたの質問を投稿したときに何かが間違っていたと思います。書式設定が乱れ、コードがありません。あなたの質問を解決できますか? – Lucas

+0

ええ、私はそれを修正したと思います –

+3

バグは何ですか? – Toad

答えて

1

変化を計算するために私のプログラムのバグを把握することはできません。これに

for(k=0;k<(n-2);k++) 

for(k=0;k<(n-1);k++) 

また、より説明変数名を使用してみてください。..

+2

ではなく、20個の置換が得られます。 24の結果は24の正しい結果を意味しません。 –

+0

正確に。アルゴリズムは明らかに間違っています。なぜなら、明らかに 'n! '時間を出力しないからです。 – avakar

+0

私は質問者のアルゴリズムが正しくないことを知っていますが、彼は正確さを求めていませんでした。彼は私にした24個の置換の代わりに20個の "バグ"を発見するように私に求めていました。私が知っている限り、彼はその特定のアルゴリズムを使いたいという非常に良い理由があります。 –

2

いくつかの追加資料(私は少し酔っている、私はおそらくこれを明日編集し直す必要があるので、塩の粒でそれを取る):

クヌースとセジウィックは共に以前の順列をカバーしていました。あなたが持っているn個http://www.princeton.edu/~rblee/ELE572Papers/p137-sedgewick.pdf

nのアイテム:

はを見てください!順列、したがって13個のアイテムにはすでに6 227 020 800の順列があります。だから、大きなセットのアイテムのすべての順列を作成することは、かなり速く不可能になります。

並べ替え、ランキング/非ランキング、増分変更メソッドを作成するための基本的なアルゴリズムは2組あります。

ランキング/ランキングには2つの方法があり、ランク付けされていません。

ランクでは、genereration orderにおける順列の位置が得られます。

Unrankは整数mにある置換を与えます。0> = m < = n!とnは順列を作成するアイテムの量です。

これは、次のような例さまざまな場合に便利です:ランダムな順列を作成

(あなただけの0からnまでの乱数を作成し、(乱数)unrankを呼んで!)と位置乱数で順列を取得します。

次の順列を得る:あなたは順列pを持ち、Rank(p)を呼び出してUnrank(rank + 1)を呼び出します。

インクリメンタル変更方法:

これらの基本的スワッピングを介して動作し、ランキング/ unrankingよりも効率的です:ウィキペディアから

、順不同世代:

function permutation(k, s) { 
    for j = 2 to length(s) { 
     swap s[(k mod j) + 1] with s[j]; // note that our array is indexed starting at 1 
     k := k/j;  // integer division cuts off the remainder 
    } 
    return s; 
} 
1

私はポイントを知りませんあなたのプログラムのですが、std :: next_permutationの実装を読むことを試みるかもしれません。ループを使ってすべての順列を生成するのは幾分難しく、再帰を使うほうが好きです。

+0

+1、私はCの初心者がイテレータを使ったテンプレートのC++コードを解析するのに満足しているとは思っていません。しかし、 'next_permutation'についての素晴らしい記事があります:http://marknelson.us/2002/03/01/next-permutation/ – avakar

関連する問題