Unity
[셔플 알고리즘] The Fisher-Yates
JiHxxn
2024. 3. 16. 15:34
📜 information
System.Random prng = new System.Random(seed);
// -1 하는 이유는 'the fisher-Yates' 알고리즘에 마지막 인덱스는 생략해도 되기 때문
for (int i = 0; i < array.Length - 1; i++)
{
int randomIndex = prng.Next(i, array.Length);
T tempItem = array[randomIndex];
array[randomIndex] = array[i];
array[i] = tempItem;
}
return array;
- 배열을 한 바퀴 돌면서 랜덤으로 뽑힌 값을 자신의 인덱스와 교환한다.
- 배열의 마지막 인덱스는 구조상 같은 값으로 유지되기 때문에 생략해도 된다.
- 랜덤 값은 0에서 배열의 크기 사이의 값을 뽑는다.
- 반복문으로 돌면서 랜덤으로 뽑힌 값을 해당 인덱스 값과 바꿔 셔플 한다.
📖 참고 문서
Unity Create a Game Series (E09. obstacle placement)