random_shuffle |
Randomize a sequence using random shuffles.
Shuffle all elements in the
sequence [ first ... last )
using uniformly selected random swaps. Use operator=
to perform the swaps. The first version uses an internal random number generator
to generate the indices of the elements to swap, whereas the second version uses
the random number generator rand . The parameter rand
must be a random number generator that takes a parameter n
and returns an integral random number between 0 and ( n
- 1 ).
#include <algorithm>
template< class RandomAccessIterator >
void random_shuffle
(
RandomAccessIterator first,
RandomAccessIterator last
);
template< class RandomAccessIterator, class RandomNumberGenerator >
void random_shuffle
(
RandomAccessIterator first,
RandomAccessIterator last,
RandomNumberGenerator& rand
);
Time complexity is linear as (
last - first )
swaps are performed. Space complexity is constant.
#include <iostream>
#include <algorithm>
int numbers[ 6 ] = { 1, 2, 3, 4, 5, 6 };
void
main()
{
random_shuffle( numbers, numbers + 6 );
for ( int i = 0; i < 6; ++i )
cout << numbers[ i ] << ` `;
cout << "\n";
}
3 1 6 2 4 5
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
void
main()
{
vector< int > v1( 10 );
for ( size_t j = 0; j < v1.size(); ++j )
v1[ j ] = j;
ostream_iterator< int > iter( cout, " " );
copy( v1.begin(), v1.end(), iter );
cout << "\n";
for ( int i = 0; i < 3; ++i )
{
random_shuffle( v1.begin(), v1.end() );
copy( v1.begin(), v1.end(), iter );
cout << "\n";
}
}
0 1 2 3 4 5 6 7 8 9
2 8 9 1 3 4 0 7 6 5
2 5 3 1 4 8 7 6 0 9
8 1 3 6 7 9 2 5 0 4
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <iterator>
#include <vector>
class MyRandomGenerator
{
public:
unsigned long operator() (unsigned long n_ );
};
unsigned long
MyRandomGenerator::operator() (unsigned long n_ )
{
return rand() % n_;
}
void
main()
{
vector< int > v1( 10 );
for ( size_t j = 0; j < v1.size(); ++j )
v1[ j ] = j;
ostream_iterator< int > iter( cout, " " );
copy( v1.begin(), v1.end(), iter );
cout << "\n";
MyRandomGenerator r;
for ( int i = 0; i < 3; ++i )
{
random_shuffle( v1.begin(), v1.end(), r );
copy( v1.begin(), v1.end(), iter );
cout << "\n";
}
}
0 1 2 3 4 5 6 7 8 9
5 0 7 1 9 2 8 3 4 6
2 5 3 0 6 7 4 1 9 8
7 2 1 5 8 3 9 0 6 4
Copyright©1994-2026 Recursion Software LLC
All Rights Reserved - For use by licensed users only.