
강의 4-6에서 배열 arr을 섞기 위해 강사님께서 다음과 같은 코드를 작성하셨습니다.
arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray();
제가 이해하기로는 arr의 각 원소에 0 이상 7 미만의 무작위 실수를 대응시켜서 정렬하는 방법 같은데, 극단적인 시나리오를 들자면, 만약 난수 생성기가 고장나거나 단순한 우연으로 인해 난수 생성기에서 같은 수만 계속 나오면 결과적으로 arr이 전혀 섞이지 않게 되는 것 아닌가요?
저라면 다음과 같은 Fischer-Yates 알고리즘을 사용하겠습니다. 각 순열(permutation)이 나올 확률이 모두 같은 것이 특징입니다.
for (int i = 0; i < arr.Length; i += 1)
{
int j = Random.Range(i, arr.Length);
if (i != j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
