[rng] Add function to shuffle an int array

This commit is contained in:
chme 2016-10-15 10:06:18 +02:00
parent 3921cf5732
commit 2d27636644
2 changed files with 22 additions and 0 deletions

View File

@ -144,3 +144,22 @@ shuffle_ptr(struct rng_ctx *ctx, void **values, int len)
}
}
/* Fisher-Yates shuffling algorithm
* Durstenfeld in-place shuffling variant
*/
void
shuffle_int(struct rng_ctx *ctx, int *values, int len)
{
int i;
int32_t j;
int tmp;
for (i = len - 1; i > 0; i--)
{
j = rng_rand_range(ctx, 0, i + 1);
tmp = values[i];
values[i] = values[j];
values[j] = tmp;
}
}

View File

@ -21,5 +21,8 @@ rng_rand_range(struct rng_ctx *ctx, int32_t min, int32_t max);
void
shuffle_ptr(struct rng_ctx *ctx, void **values, int len);
void
shuffle_int(struct rng_ctx *ctx, int *values, int len);
#endif /* !__RNG_H__ */