配列をランダムに並べ替える関数を作る。 //********************************************************* // 配列をランダムに並べ替える //********************************************************* void random_shuffle( void *array, size_t num, size_t size ) { char *start = (char *)array; {for( size_t i = 1; i < num; ++i ) { const size_t x = rand() % (i+1); if ( x != i ) { memswap( start + (i*size), start + (x*size), size ); } }} }//random_shuffle 使用例/* 関数 random_shuffle() の使用例です。 */ int main( void ) { #define init_array(a,n) {for(int k=0;k<n;++k){a[k]=(short)k;}} #define print_array(a,n) {for(int k=0;k<n;++k){printf("%d, ",a[k]);}puts("");} short array[10]; int test_num[] = { 2, 3, numof(array), 0 }; srand(time(NULL)); init_array( array, 1 ); random_shuffle( array, 1, sizeof(short) ); print_array( array, 1 ); {for( int *p = test_num; 0 != *p; ++p ) { init_array( array, *p ); print_array( array, *p ); {for( int j = 0; j < 5; ++j ) { init_array( array, *p ); random_shuffle( array, *p, sizeof(short) ); print_array( array, *p ); }} }} return 0; #undef init_array // #define init_array(a,n) #undef print_array // #define print_array(a,n) }//main 実行結果0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 2, 1, 2, 0, 0, 1, 2, 2, 0, 1, 2, 0, 1, 1, 2, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 6, 9, 1, 4, 3, 5, 7, 2, 8, 8, 3, 7, 5, 1, 4, 9, 2, 0, 6, 2, 1, 6, 8, 5, 4, 0, 9, 7, 3, 2, 8, 7, 5, 4, 9, 6, 1, 3, 0, 4, 0, 5, 1, 2, 6, 8, 7, 3, 9, 関連
・配列の要素を逆順に並べ替える |
|