|
STLport의 경우에는 이렇게 구현되어 있더군요.
template <class _RandomAccessIter>
void random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last) {
_STLP_DEBUG_CHECK(__check_range(__first, __last))
if (__first == __last) return;
for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
iter_swap(__i, __first + __random_number((__i - __first) + 1));
}
위의 코드는 반복자(포인터와 유사한 개념)를 사용한 코드이고,
방태윤님의 코드는 배열의 인덱스를 사용한 차이만 있지,
본질적으로는 동일한 알고리듬입니다.
방태윤 님이 쓰신 글 :
: 이 방법은 어떨까요?
:
: int pos[100];
: for(i=0;i<100;i++) pos[i]=i;
: for(i=0;i<100;i++){
: int a=random(100);
: int k=pos[i];
: pos[i]=pos[a];
: pos[a]=k;
: }
:
: ^^.
:
: 진수.네모 님이 쓰신 글 :
: : 1에서 100 사이에서 난수를 발생 시키려 합니다.
: :
: : for(inti=0;i<100;i++)
: : random(100);
: :
: : 하면 같은 숫자가 여러번 반복되는데.. 서로 겹치지 않게 하려면 어떻게 하면 좋을까요
: :
|