这个算法将[first, last)的元素次序随机重排。也就是说,在N!中可能的排列中随机选出一种,此处N为last-first。这个算法详述于Donald Knuth的《计算机程序设计艺术》3.4.2节。算法正确性的证明可以参考《算法导论》5.3节。

   
   
   
   
  1. template <class RandomAccessIterator>                                             
  2. inline void random_shuffle(RandomAccessIterator first, RandomAccessIterator last) { 
  3.     if(first != last)                                                             
  4.         for(RandomAccessIterator i = first + 1; i != last; ++i)                   
  5.             iter_swap(i, first + (rand() % ((i - first) + 1)));