A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.geeksforgeeks.org/cpp/shuffle-an-array-using-stl-in-c/ below:

Shuffle an Array using STL in C++

Shuffle an Array using STL in C++

Last Updated : 11 Jul, 2025

Given an array, the task is to shuffle the whole array and print it.
Example 
 

Input  (1, 2, 3, 4, 5, 6, 7}
Output  {3, 1, 6, 7, 2, 4, 5}

Input  (1, 2, 3}
Output  {3, 1, 2}


STL contains two methods which can be used to get a shuffled array. These are namely shuffle() and random_shuffle().
 

shuffle


This method rearranges the elements in the range [first, last) randomly, using g as a uniform random number generator. It swaps the value of each element with that of some other randomly picked element. It determines the element picked by calling g().
Template 
 

template 
  void shuffle (RandomAccessIterator first, 
                RandomAccessIterator last, 
                URNG&& g)
{
  for (auto i=(last-first)-1; i>0; --i) {
    std::uniform_int_distribution d(0, i);
    swap (first[i], first[d(g)]);
  }
}


Implementation
 

CPP
// C++ program to shuffle
// the given array
// using shuffle() method

#include <bits/stdc++.h>
using namespace std;

// Shuffle array
void shuffle_array(int arr[], int n)
{

    // To obtain a time-based seed
    unsigned seed = 0;

    // Shuffling our array
    shuffle(arr, arr + n,
            default_random_engine(seed));

    // Printing our array
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
    cout << endl;
}

// Driver code
int main()
{

    int a[] = { 10, 20, 30, 40 };

    int n = sizeof(a) / sizeof(a[0]);

    shuffle_array(a, n);

    return 0;
}

Note: Output may differ each time because of the random function used in the program.
 

random_shuffle


This function randomly rearranges elements in the range [first, last). It swaps the value of each element with some other randomly picked element. When provided, the function gen determines which element is picked in every case. Otherwise, the function uses some unspecified source of randomness.
Template 
 

template 
  void random_shuffle (RandomAccessIterator first, 
                       RandomAccessIterator last,
                       RandomNumberGenerator& gen)
{
  iterator_traits::difference_type i, n;
  n = (last-first);
  for (i=n-1; i>0; --i) {
    swap (first[i], first[gen(i+1)]);
  }
}


Implementation
 

CPP14
// C++ program to shuffle
// the given array
// using random_shuffle() method

#include <bits/stdc++.h>
using namespace std;

// Shuffle array
void shuffle_array(int arr[], int n)
{

    // To obtain a time-based seed
    unsigned seed = 0;

    // Shuffling our array using random_shuffle
    random_shuffle(arr, arr + n);

    // Printing our array
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
    cout << endl;
}

// Driver code
int main()
{

    int a[] = { 10, 20, 30, 40 };

    int n = sizeof(a) / sizeof(a[0]);

    shuffle_array(a, n);

    return 0;
}

Note: Output may differ each time because of the random function used in the program.
 

Which is better?



RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4