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)); とすれば、現在時刻により初期化されるため、 毎回、実行結果が異なる。