ソースコードの説明.
ランダムな順列(効率の悪い方法)
1~N の値を1回使ってできるランダムな順列をつくる.
たとえば, 1~6のランダムな順列とは, 3, 2, 5, 1, 6, 4のようなものである. 以下に示すアルゴリズムは, 最悪でN2オーダーお繰り返しを行うもので, 効率の悪い方法である.
- 1~N の乱数を一つ得る. これを順列の1番目のデータとする.
- 以下をN-1回繰り返す.
- 1~N の乱数を一つ得る.
- 3で求めた乱数が, いままで作ってきた順列の中に入っていれば3に戻る. irnd(N)は 1~N の乱数を1個得る. irnd(0)の場合は特別で1を返す.
ソースコード
源文件
#include <stdio.h>
#include <stdlib.h>
#define N 20
int irnd(int);
int main(void){
int i,j,flag,a[N+1];
a[1]=irnd(N);
for(i=2; i<=N; i++){
do{
a[i]=irnd(N);flag=0;
for(j=1; j<i; j++){
if(a[i]==a[j]){
flag=1; break;
}
}
} while (flag==1);
}
for(i=1; i<=N; i++){
printf(" %d ",a[i]);
}
printf("\n");
return 0;
}
int irnd(int n){
return (int)(rand()/(RAND_MAX+0.1)*n+1);
}
|
実行結果
1 3 16 10 11 5 14 19 8 17 2 9 12 15 6 7 13 20 18 4
|
Chapter1 @ 目録 @ HomeWork List @ 昭亮's Homepage