这个算法将[first, last)的元素次序随机重排。也就是说,在N!中可能的排列中随机选出一种,此处N为last-first。这个算法详述于Donald Knuth的《计算机程序设计艺术》3.4.2节。算法正确性的证明可以参考《算法导论》5.3节。
- template <class RandomAccessIterator>
- inline void random_shuffle(RandomAccessIterator first, RandomAccessIterator last) {
- if(first != last)
- for(RandomAccessIterator i = first + 1; i != last; ++i)
- iter_swap(i, first + (rand() % ((i - first) + 1)));
- }