欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

答复

答复

看看VC6的STL部分random_shuffle()算法的源码 原理一模一样
    // TEMPLATE FUNCTION random_shuffle
template<class _RI> inline
  void random_shuffle(_RI _F, _RI _L)
  {if (_F != _L)
    _Random_shuffle(_F, _L, _Dist_type(_F)); }
template<class _RI, class _Pd> inline
  void _Random_shuffle(_RI _F, _RI _L, _Pd *)
  {const int _RBITS = 15;
  const int _RMAX = (1U << _RBITS) - 1;
  _RI _X = _F;
  for (_Pd _D = 1; ++_X != _L; ++_D)
    {unsigned long _Rm = _RMAX;
    unsigned long _Rn = rand() & _RMAX;
    for (; _Rm < _D && _Rm != ~0UL;
      _Rm = _Rm << _RBITS | _RMAX)
      _Rn = _Rn << _RBITS | _RMAX;
    iter_swap(_X, _F + _Pd(_Rn % _D)); }}
template<class _RI, class _Pf> inline
  void random_shuffle(_RI _F, _RI _L, _Pf& _R)
  {if (_F != _L)
    _Random_shuffle(_F, _L, _R, _Dist_type(_F)); }
template<class _RI, class _Pf, class _Pd> inline
  void _Random_shuffle(_RI _F, _RI _L, _Pf& _R, _Pd *)
  {_RI _X = _F;
  for (_Pd _D = 1; ++_X != _L; ++_D)
    iter_swap(_X, _F + _Pd(_R(_D))); }

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功