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

C#에서 비정적(인스턴스) 메서드를 활용해 1차원 배열을 오름차순으로 정렬하는 방법

개요

C#에서 정적(static) 메서드가 아닌 인스턴스 메서드를 사용하여 1차원 배열을 오름차순으로 정렬하는 방법을 알아보겠습니다. 이 예제에서는 선택 정렬(selection sort)과 유사한 중첩 반복문(nested for loop)을 활용해 배열의 요소를 서로 비교하고 교환하는 방식으로 정렬을 수행합니다.

1단계: 정렬되지 않은 배열 선언

먼저 정렬할 배열을 초기화합니다.

int[] list = {87, 45, 56, 22, 84, 65};

2단계: 중첩 반복문으로 정렬 수행

다음으로, 배열을 매개변수로 전달받은 메서드 내부에서 중첩 for 루프를 사용해 요소를 정렬합니다. 바깥쪽 루프는 현재 위치를 기준으로 삼고, 안쪽 루프는 그 이후의 모든 요소와 값을 비교하여 더 작은 값이 앞쪽에 오도록 교환(swap)합니다.

for(int i=0; i< arr.Length; i++) {
    for(int j=i+1; j<arr.Length; j++) {
        if(arr[i]>=arr[j]) {
            temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
    Console.Write(arr[i] + " ");
}

여기서 temp 변수는 두 요소의 값을 안전하게 맞바꾸기 위한 임시 저장소 역할을 합니다.

전체 예제 코드

아래는 비정적 메서드를 사용하여 1차원 배열을 오름차순으로 정렬하는 완전한 C# 코드입니다. Main 메서드 내에서 클래스의 인스턴스를 생성한 후, 해당 인스턴스를 통해 정렬 메서드를 호출하는 점이 핵심입니다.

using System;

namespace Demo {
    public class MyApplication {
        public static void Main(string[] args) {
            int[] list = {87, 45, 56, 22, 84, 65};

            Console.WriteLine("Original Unsorted List");
            foreach (int i in list) {
                Console.Write(i + " ");
            }

            // 인스턴스 생성 후 비정적 메서드 호출
            MyApplication m = new MyApplication();
            m.sortFunc(list);
        }

        // 비정적(인스턴스) 메서드로 정렬 구현
        public void sortFunc(int[] arr) {
            int temp = 0;

            Console.WriteLine("\nSorted List");
            for(int i=0; i< arr.Length; i++) {
                for(int j=i+1; j<arr.Length; j++) {
                    if(arr[i]>=arr[j]) {
                        temp = arr[j];
                        arr[j] = arr[i];
                        arr[i] = temp;
                    }
                }
                Console.Write(arr[i] + " ");
            }
        }
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

Original Unsorted List
87 45 56 22 84 65
Sorted List
22 45 56 65 84 87

핵심 포인트 정리

  • 비정적 메서드 호출: 정적 메서드는 클래스 이름으로 직접 호출할 수 있지만, 인스턴스 메서드는 반드시 new 키워드로 객체를 생성한 뒤 참조를 통해 호출해야 합니다.
  • 정렬 로직: 중첩 반복문을 사용하므로 시간 복잡도는 O(n²)입니다. 학습 목적에는 적합하지만, 실제 프로젝트에서는 성능이 중요한 경우 Array.Sort()와 같은 내장 메서드를 사용하는 것이 효율적입니다.
  • 배열의 참조 특성: C#에서 배열은 참조 타입이므로, 메서드 내부에서 변경된 값이 원본 배열에도 그대로 반영됩니다.