/*
* ------------------------------------
* 랜덤한 순열
* ------------------------------------
*/
#include <stdio.h>
#include <stdlib.h>
#define N 20
int irnd(int);
int main(void)
{
int i,j,d,a[N+1];
for (i=1;i<=N;i++)
a[i]=i;
for (i=N;i>1;i--){
j=irnd(i-1);
d=a[i];a[i]=a[j];a[j]=d;
}
for (i=1;i<=N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
int irnd(int n) /* 1 ~ N 의 난수 */
{
return (int)(rand()%n + 1);
}
// a[1]~a[N]에 1~N의 수를 순서대로 저장한다.
1~N-1중에서 난수 j를 얻는다. 이것을 첨자로 하는 배열 a[j]와 a[N]을 교환한다. 이렇게 해서
a[N]항의 순열은 확정된다.