This algorithm produces an unbiased permutation: every permutation is equally likely.
Shuffling an array of n elements in C++:
void fisherYatesShuffling(int *arr, int n_elements) { int shuffled_array[n_elements]; int ind_taken[n_elements]; for (int i = 0; i < n_elements; i++) ind_taken[i] = 0; int index; for (int i = 0; i < n; i++) { do { index = rand() % n_elements; } while (ind_taken[index] != 0); ind_taken[index] = 1; shuffled_array[i] = *(arr + index); } for (int i = 0; i < n_elements; i++) { cout << shuffled_array[i] << " "; } }