C# - 피셔 예이츠 셔플 (Fisher Yates Shuffle)

2025. 10. 13. 15:33·C#

코딩테스트던 게임개발이던 프로그래밍을 할 때 랜덤하게 섞는 기능은 자주 사용하게 된다.

피셔 예이츠는 난수 기반 섞기의 대표적인 고전 알고리즘이다.

구현 방법은 매우 간단하다.

 

public static void FisherYatesShuffle(int[] inputArr)
{
    Random random = new Random(); //

    for (int i = inputArr.Length - 1; i > 0; i--)
    {
        int j = random.Next(0, i + 1);

        int temp = inputArr[i];
        inputArr [i] = inputArr[j];
        inputArr [j] = temp;
    }
}

 

배열을 뒤에서부터 하나씩 인덱스를 순회하면서, 랜덤한 인덱스와 교환해주는 매우 간단한 구조다.

 

스왑 부분은 참고로

(arr[i], arr[j]) = (arr[j], arr[i]);

 

이런 형태로 간단하게 표현할 수도 있다.

 

시간복잡도 O(n) - 한 번씩만 순회
공간 복잡도 O(1) - 추가 메모리 거의 없음
균등성 완전한 Uniform Random Distribution

 

'C#' 카테고리의 다른 글

C# - 메모리 구조, GC  (0) 2025.10.13
C# - 정렬 알고리즘 (Sorting Algoritm) : 버블/선택/삽입/병합/퀵 정렬  (0) 2025.10.13
C# - 가중치 그래프 - 다익스트라 알고리즘 으로 지하철 노선 최단경로 구하기  (0) 2025.10.13
C# - 자료구조 : 트리 (Tree) & 그래프 (Graph)  (1) 2025.09.29
C# - 덱 (Deque : Double Ended Queue)  (0) 2025.09.29
'C#' 카테고리의 다른 글
  • C# - 메모리 구조, GC
  • C# - 정렬 알고리즘 (Sorting Algoritm) : 버블/선택/삽입/병합/퀵 정렬
  • C# - 가중치 그래프 - 다익스트라 알고리즘 으로 지하철 노선 최단경로 구하기
  • C# - 자료구조 : 트리 (Tree) & 그래프 (Graph)
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    firebase
    알고리즘
    최적화
    interface
    클래스
    struct
    function
    list
    Abstract
    큐
    Network
    유니티
    unity
    자료구조
    useState
    stack
    delegate
    Queue
    추상 클래스
    스택
    C#
    게임
    Photon
    네트워크
    console
    Design Pattern
    class
    터미널
    inputsystem
    콘솔
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
C# - 피셔 예이츠 셔플 (Fisher Yates Shuffle)
상단으로

티스토리툴바