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

C#에서 비정적(non-static) 메서드를 활용해 1차원 배열을 내림차순으로 정렬하는 방법

비정적 메서드로 1차원 배열 내림차순 정렬하기

C#에서 인스턴스(비정적) 메서드를 사용하면 별도의 static 선언 없이도 배열 정렬 로직을 클래스 안에 캡슐화할 수 있습니다. 이번 글에서는 선택 정렬 방식의 중첩 for 루프를 활용해 1차원 int 배열을 내림차순으로 정렬하는 과정을 단계별로 살펴보겠습니다.


1단계: 정렬되지 않은 배열 준비

먼저 정렬할 1차원 배열을 선언하고 초기값을 설정합니다.

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

2단계: 중첩 for 루프로 내림차순 정렬

다음으로, 정렬 대상 배열을 매개변수로 받아 처리하는 비정적 메서드를 만들고, 그 안에서 두 개의 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] + " ");
}

이 방식은 각 단계가 끝날 때마다 가장 큰 남은 값이 해당 위치에 확정되므로, 루프가 진행될수록 배열이 점점 내림차순으로 정리됩니다.


전체 코드 예제

아래는 Main 메서드에서 객체를 생성한 뒤 비정적 sortFunc 메서드를 호출하여 1차원 배열을 내림차순으로 정렬하는 완전한 코드입니다.

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);
        }

        // 비정적(instance) 정렬 메서드
        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] + " ");
            }
        }
    }
}

주목할 점은 sortFunc가 static이 아니기 때문에 Main 메서드 내에서 반드시 MyApplication m = new MyApplication();처럼 클래스의 인스턴스를 먼저 생성한 후 호출해야 한다는 것입니다. 이것이 비정적 메서드 사용의 핵심입니다.


실행 결과

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

마무리 및 참고 사항

이 예제는 시간 복잡도가 O(n²)인 단순 선택 정렬 방식입니다. 학습용이나 소규모 배열에는 적합하지만, 실무 환경에서 더 나은 성능이 필요하다면 C#에서 기본 제공하는 Array.Sort()(오름차순)와 Array.Reverse() 조합, 또는 LINQ의 OrderByDescending()을 사용하는 것이 효율적입니다. 다만, 정렬 알고리즘의 동작 원리를 직접 구현해 보는 것은 프로그래밍 학습에 큰 도움이 됩니다.