# C++ <algorithm> - random_shuffle() Function

The C++ algorithm::random_shuffle function is used to randomly shuffle the elements in the range [first,last). The function rearranges elements based on default random number generator (in first version) or gen (in second version).

### Syntax

```//default generator version
template <class RandomAccessIterator>
void random_shuffle (RandomAccessIterator first,
RandomAccessIterator last);

//specific generator version
template <class RandomAccessIterator, class RandomNumberGenerator>
void random_shuffle (RandomAccessIterator first,
RandomAccessIterator last,
RandomNumberGenerator& gen);
```
```//default generator version
template <class RandomAccessIterator>
void random_shuffle (RandomAccessIterator first,
RandomAccessIterator last);

//specific generator version
template <class RandomAccessIterator, class RandomNumberGenerator>
void random_shuffle (RandomAccessIterator first,
RandomAccessIterator last,
RandomNumberGenerator&& gen);
```

### Parameters

 `first` Specify initial position of the random-access iterators of the sequence to be shuffled. The range used is [first,last). `last` Specify final position of the random-access iterators of the sequence to be shuffled. The range used is [first,last). `gen` An unary function that takes one element in the range as argument and returns random number.

None.

### Time Complexity

Linear i.e, Θ(n).

### Example:

In the example below, the algorithm::random_shuffle function is used to randomly shuffle the elements in the given range.

```#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main (){
vector<int> vec= {10, 20, 30, 40, 50, 60, 70, 80};
vector<int>::iterator it;

cout<<"vec contains: ";
for(it = vec.begin(); it != vec.end(); ++it)
cout<<" "<<*it;

//randomly shuffle the elements of the
//vector using default generator
random_shuffle(vec.begin(), vec.end());

cout<<"\nvec contains: ";
for(it = vec.begin(); it != vec.end(); ++it)
cout<<" "<<*it;

return 0;
}
```

One of the possible output of the above code could be:

```vec contains:  10 20 30 40 50 60 70 80
vec contains:  50 40 80 70 10 60 30 20
```

### Example:

The example below shows how to use gen with algorithm::random_shuffle function.

```#include <iostream>
#include <algorithm>
#include <vector>
#include <stdlib.h>     //srand, rand
#include <ctime>        //time
using namespace std;

float mygen (int i) {
return rand()%i;
}

int main (){
//initialize random seed
srand (time(NULL));

vector<int> vec= {10, 20, 30, 40, 50, 60, 70, 80};
vector<int>::iterator it;

cout<<"vec contains: ";
for(it = vec.begin(); it != vec.end(); ++it)
cout<<" "<<*it;

//randomly shuffle the elements of the vector
//using mygen as random number generator
random_shuffle(vec.begin(), vec.end(), mygen);

cout<<"\nvec contains: ";
for(it = vec.begin(); it != vec.end(); ++it)
cout<<" "<<*it;

return 0;
}
```

The output of the above code will be:

```vec contains:  10 20 30 40 50 60 70 80
vec contains:  20 40 60 30 50 70 80 10
```

❮ C++ <algorithm> Library

5