データ攪拌プログラム



[ 簡単な説明 ]

データ撹拌(シャッフル)用の関数です。int 型、double 型、char 型用の配列を撹拌する関数を定義しています。

各関数には、引数として、配列名、配列サイズ、撹拌用の乱数生成の種を与えてください。
なお、各関数は、内部で一様乱数として ornd2( )を使用しています。(初期設定も内部で行っています。)
本関数群を使用する際は、他のルーチンでは ornd2( )は使用しない方がいいと思います。

データ撹拌関数
shuffle_i( ) int 型
shuffle_d( ) double 型
shuffle_c( ) char 型

プログラム・ソース("shuffle.c")           top (トップに戻る)
/*		shuffle.c		配列撹拌ルーチン	*/
#include <stdio.h>
#include <string.h>
#include "random.h"

void shuffle_i(int *a, int n, long seed)
{
	int i, m, *p, *q, w;

	init_ornd2(seed);
	for(i = 0, m = n * 5; i < m; i++)
	{
		p = a + (int)(ornd2() * n);
		q = a + (int)(ornd2() * n);
		w = *p;
		*p = *q;
		*q = w;
	}
}

void shuffle_d(double *a, int n, long seed)
{
	int i, m;
	double *p, *q, w;

	init_ornd2(seed);
	for(i = 0, m = n * 5; i < m; i++)
	{
		p = a + (int)(ornd2() * n);
		q = a + (int)(ornd2() * n);
		w = *p;
		*p = *q;
		*q = w;
	}
}

void shuffle_c(unsigned char **a, int n, long seed)
{
	int i, m;
	unsigned char **p, **q, *w;

	init_ornd2(seed);
	for(i = 0, m = n * 5; i < m; i++)
	{
		p = a + (int)(ornd2() * n);
		q = a + (int)(ornd2() * n);
		w = *p;
		*p = *q;
		*q = w;
	}
}