Fisher-Yatesシャッフルアルゴルズムによりint型配列を並べ変えるプログラムを下に示す。
[shuffle.c]
#include <stdio.h>
#include <stdlib.h>
void shuffle(int array[], int size) {
for(int i = 0; i < size; i++) {
int j = rand()%size;
int t = array[i];
array[i] = array[j];
array[j] = t;
}
}
int main(void){
int list[10] = {0,1,2,3,4,5,6,7,8,9};
shuffle(list, 10);
for (int i = 0; i < 10; i++) {
printf("%d,", list[i]);
}
return 0;
}
このプログラムをコンパイル・実行した結果を下に示す。
c:\gisa>gcc \_www\algorithm\src\shuffle.c c:\gisa>a 3,7,0,1,2,9,8,6,4,5,
rand関数は 0~RAND_MAX までの整数の乱数(疑似乱数)を発生させる。
上のプログラムでは発生する乱数列は毎回同じである。 乱数列を変えるには、srand関数を使って初期化する。 srand((unsigned int)time(NULL)); とすれば、現在時刻により初期化されるため、 毎回、実行結果が異なる。