配列をシャッフルする
仕事では専らPHPだが、プライベートでは段々、C, C++に戻りつつある今日のこの頃。
PHP
<?php function my_shuffle(&$arr){ srand((double) microtime() * 10000000); $n = count($arr); for($i=0;$i<$n;$i++){ $rnd = rand(0, $n - 1); $temp = $arr[$rnd]; $arr[$rnd] = $arr[$i]; $arr[$i] = $temp; } } ?>
C
#include <stdio.h> #include <stdlib.h> #include <time.h> #define COUNT(arr) (sizeof(arr)/sizeof(arr[0])) void shuffle(int arr[], int n); void shuffle(int arr[], int n){ int i, rnd, temp; srand(time(NULL)); for(i=0;i<n;i++){ rnd = rand() % n; temp = arr[i]; arr[i] = arr[rnd]; arr[rnd] = temp; } } int main(int argc, char *argv[]){ int i, n; int nums[] = {1, 2, 3, 4, 5}; n = COUNT(nums); shuffle(nums, n); for(i=0;i<n;i++){ printf("%d ", nums[i]); } printf("\n"); return 0; }