Fisher–Yates shuffle

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] << " ";
    }
}