トップC言語入門 > シャッフル(配列の要素をランダムに並び替える)
シャッフル(配列の要素をランダムに並び替える)

1. シャッフル

Fisher-Yatesシャッフルアルゴルズムによりint型配列を並べ変えるプログラムを下に示す。

[shuffle.c]
#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:\sys>cl /nologo \mh\www\c01\algorithm\shuffle.c
shuffle.c

c:\sys>shuffle
3,7,0,1,2,9,8,6,4,5,

参考文献

[1] 【C言語/C++】配列をシャッフルしてランダムに入れ替える