[C/C++]シャッフルアルゴリズム

3511 ワード

#include  #include  #include  int   d[6]; int   i,n,a,b,t; int   c,j; void   main() {      srand ( time (NULL));      printf ( "shuffle 0..n-1 demo
"
);      for   (n=1;n<=5;n++) { /*  1~5  */          printf ( "_____n=%d_____
"
,n);          j=1;          for   (c=1;c<=n;c++) j=j*c; /* j n! */          j*=n*2;          for   (c=1;c<=j;c++) { /*  n*2*n!  */              for   (i=0;i /*  0~n-1 */              for   (i=n;i>0;i--) { /*  0~n-1 */                  a=i-1;b= rand ()%i;                  if   (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}              }              printf ( "%04d:" ,c);              for   (i=0;i printf ( "%d" ,d[i]);              printf ( "
"
);          }      }      printf ( "shuffle 1..n demo
"
);      for   (n=1;n<=5;n++) { /*  1~5  */          printf ( "_____n=%d_____
"
,n);          j=1;          for   (c=1;c<=n;c++) j=j*c; /* j n! */          j*=n*2;          for   (c=1;c<=j;c++) { /*  n*2*n!  */              for   (i=1;i<=n;i++) d[i]=i; /*  1~n */              for   (i=n;i>1;i--) { /*  1~n */                  a=i;b= rand ()%i+1;                  if   (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}              }              printf ( "%04d:" ,c);              for   (i=1;i<=n;i++)  printf ( "%d" ,d[i]);              printf ( "
"
);          }      } }