Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 2차원 배열을 정렬하는 방법

C#에서 2차원 배열을 정렬하려면 중첩된 for 루프 안에 비교용 for 루프를 하나 더 추가하여 인접한 요소들을 조건에 따라 검사하고 교환하는 방식(버블 정렬)을 사용할 수 있습니다.

정렬 로직의 핵심 코드

아래 코드는 각 행(row) 내에서 이웃한 두 요소를 비교하여, 앞의 값이 뒤의 값보다 크면 서로 자리를 바꾸는 버블 정렬 방식입니다.

for (int k = 0; k < j; k++) {
    if (arr[i, k] > arr[i, k + 1]) {
        int myTemp = arr[i, k];
        arr[i, k] = arr[i, k + 1];
        arr[i, k + 1] = myTemp;
    }
}

GetLength() 메서드를 활용한 전체 정렬

외부 루프가 배열의 모든 행을 순회하도록 하려면 GetLength() 메서드를 사용합니다. GetLength(0)은 배열의 행 개수를, GetLength(1)은 열 개수를 반환하므로, 이를 활용하면 배열의 실제 크기에 맞춰 유연하게 정렬을 수행할 수 있습니다.

for (int i = 0; i < arr.GetLength(0); i++) {
    for (int j = arr.GetLength(1) - 1; j > 0; j--) {
        for (int k = 0; k < j; k++) {
            if (arr[i, k] > arr[i, k + 1]) {
                int myTemp = arr[i, k];
                arr[i, k] = arr[i, k + 1];
                arr[i, k + 1] = myTemp;
            }
        }
    }
    Console.WriteLine();
}

동작 원리 요약

  • 첫 번째 루프(i): 2차원 배열의 각 행을 차례대로 순회합니다.
  • 두 번째 루프(j): 해당 행에서 정렬이 완료되지 않은 구간의 끝 위치를 나타내며, 한 번의 패스가 끝날 때마다 범위가 줄어듭니다.
  • 세 번째 루프(k): 인접한 두 요소를 비교하여 필요하면 값을 교환(swap)합니다.

이처럼 세 겹의 루프를 사용하면 2차원 배열의 각 행을 독립적으로 오름차순으로 정렬할 수 있습니다. 임시 변수 myTemp를 이용해 값을 교환하는 방식은 버블 정렬의 기본적인 스왑 기법입니다.