TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcrand
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
/*****************************************************************************/
27
void
randomShuffle
(
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
/*****************************************************************************/
54
void
randomShuffleUnsigned
(
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
/*****************************************************************************/
80
void
randomPermutation
(
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
/*****************************************************************************/
106
void
randomPermutationUnsigned
(
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
/*****************************************************************************/
mertwiRandomInt64
uint64_t mertwiRandomInt64(MERTWI *mt)
Generate a random number on [0, 2^64-1]-interval using Mersenne Twister MT19937.
Definition
mertwi.c:153
randomShuffle
void randomShuffle(int *array, unsigned int n, MERTWI *mt)
Random shuffle.
Definition
shuffle.c:27
randomPermutationUnsigned
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
randomShuffleUnsigned
void randomShuffleUnsigned(unsigned int *array, unsigned int n, MERTWI *mt)
Random shuffle.
Definition
shuffle.c:54
randomPermutation
void randomPermutation(int *array, unsigned int n, int a, MERTWI *mt)
Random permutation for an array of signed integers.
Definition
shuffle.c:80
MERTWI
Definition
tpcrand.h:32
tpcextensions.h
Header file for library libtpcextensions.
tpcrand.h
Header file for libtpcrand.
Generated on
for TPCCLIB by
1.17.0