TPCCLIB
Loading...
Searching...
No Matches
shuffle.c
Go to the documentation of this file.
1
4/*****************************************************************************/
5#include "tpcclibConfig.h"
6/*****************************************************************************/
7#include <stdio.h>
8#include <stdlib.h>
9#include <math.h>
10#include <time.h>
11#include <string.h>
12/*****************************************************************************/
13#include "tpcextensions.h"
14/*****************************************************************************/
15#include "tpcrand.h"
16/*****************************************************************************/
17
18/*****************************************************************************/
29 int *array,
31 unsigned int n,
33 MERTWI *mt
34) {
35 if(n<=1 || array==NULL) return;
36 unsigned int i, j;
37 int tmp;
38 for(i=0; i<n-1; i++) {
39 j=i+mertwiRandomInt64(mt)/(UINT64_MAX/(n-i)+1);
40 tmp=array[j]; array[j]=array[i]; array[i]=tmp;
41 }
42}
43/*****************************************************************************/
44
45/*****************************************************************************/
56 unsigned int *array,
58 unsigned int n,
60 MERTWI *mt
61) {
62 if(n<=1 || array==NULL) return;
63 unsigned int i, j, tmp;
64 for(i=0; i<n-1; i++) {
65 j=i+mertwiRandomInt64(mt)/(UINT64_MAX/(n-i)+1);
66 tmp=array[j]; array[j]=array[i]; array[i]=tmp;
67 }
68}
69/*****************************************************************************/
70
71/*****************************************************************************/
82 int *array,
84 unsigned int n,
86 int a,
88 MERTWI *mt
89) {
90 if(n<1 || array==NULL) return;
91 int i;
92 for(i=0; i<(int)n; i++) array[i]=i+a;
93 randomShuffle(array, n, mt);
94}
95/*****************************************************************************/
96
97/*****************************************************************************/
108 unsigned int *array,
110 unsigned int n,
112 unsigned int a,
114 MERTWI *mt
115) {
116 if(n<1 || array==NULL) return;
117 unsigned int i;
118 for(i=0; i<n; i++) array[i]=i+a;
119 randomShuffleUnsigned(array, n, mt);
120}
121/*****************************************************************************/
122
123/*****************************************************************************/
uint64_t mertwiRandomInt64(MERTWI *mt)
Generate a random number on [0, 2^64-1]-interval using Mersenne Twister MT19937.
Definition mertwi.c:153
void randomShuffle(int *array, unsigned int n, MERTWI *mt)
Random shuffle.
Definition shuffle.c:27
void randomPermutationUnsigned(unsigned int *array, unsigned int n, unsigned int a, MERTWI *mt)
Random permutation for an array of unsigned integers.
Definition shuffle.c:106
void randomShuffleUnsigned(unsigned int *array, unsigned int n, MERTWI *mt)
Random shuffle.
Definition shuffle.c:54
void randomPermutation(int *array, unsigned int n, int a, MERTWI *mt)
Random permutation for an array of signed integers.
Definition shuffle.c:80
Header file for library libtpcextensions.
Header file for libtpcrand.