#include <stdio.h>
#include <stdlib.h>
static void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void shuffle_array(int* a, size_t N, int entropy)
{
int i=entropy;
while(i-->0) {
int* p0 = &a[rand() % N];
int* p1 = &a[rand() % N];
swap(p0, p1);
}
}
static void test_init_array(int* a, size_t N)
{
int i=0;
while(i < N) {
*a++ = i++;
}
}
static void test_print_array(int* a, size_t N)
{
int i;
for(i = 0; i < N; i++) {
if((i % 10 == 0) && (i > 0)){
printf("\n");
}
printf("%3d ", *a++);
}
printf("\n");
}
static unsigned long long rdtsc(void)
{
unsigned long long tmp;
__asm__ volatile("rdtsc;":"=A"(tmp));
return tmp;
}
main()
{
void test(int* P, size_t N, int entropy)
{
printf("%d回、位置の交換をした状態\n", entropy);
shuffle_array(P, N, entropy);
test_print_array(P, N);
}
srand(rdtsc());
const int N = 136;
int P[N];
test_init_array(P, N);
test(P, N, 0);
printf("\n\n");
test_init_array(P, N);
test(P, N, 10);
printf("\n\n");
test_init_array(P, N);
test(P, N, 100);
printf("\n\n");
return 0;
}