본문 바로가기
C#

배열과 리스트를 정렬하는 방법

by Oz Driver 2025. 7. 10.

C# 에는 배열(Array)과 리스트(List<T>)를 정렬할 수 있는 다양한 내장 메서드들이 제공됩니다.
이번 글에서는 배열과 리스트, 그리고 사용자 정의 정렬까지 정리해보겠습니다.

 

배열에서의 정렬

배열을 정렬할 때는 Array.Sort() 메서드를 사용합니다.

int[] numbers = { 5, 2, 9, 1 };
Array.Sort(numbers);

// 출력: 1, 2, 5, 9
Console.WriteLine(string.Join(", ", numbers));

 

•  아무 옵션 없이 쓰면 기본 오름차순으로 정렬됩니다.

•  내부적으로는 퀵 정렬, 힙 정렬, 삽입 정렬 등을 데이터 양과 형식에 따라 자동으로 혼합 사용합니다.

 

내림차순 정렬은 어떻게?

정렬 기준을 직접 지정하고 싶을 땐, Sort() 함수 괄호 안에 비교 기준을 담은 delegate 를 전달할 수 있습니다. 이 delegate 를 통해 어떤 방식으로 정렬할 것인지 그 내용을 직접 구현합니다. 

예를 들어, 내림차순 정렬을 하고 싶다면 다음과 같이 씁니다.

( 여기서는 delegate 를 람다식으로 사용했습니다. )

Array.Sort(numbers, (a, b) => b.CompareTo(a));

 

Reverse() 로 내림차순 흉내내기

가끔은 정렬 후 순서를 통째로 뒤집는 방식도 간편합니다.

// 오름차순 정렬
Array.Sort(arr);

// 전체를 뒤집어서 내림차순처럼 보이게
Array.Reverse(arr);

 

리스트에서의 정렬

컬렉션 (List<T>) 을 정렬할 때는 List<T>.Sort() 를 사용합니다.

배열과 마찬가지로 기본값은 오름차순입니다.

List<int> list = new List<int> { 4, 7, 1, 3 };
list.Sort();
Console.WriteLine(string.Join(", ", list)); // 출력: 1, 3, 4, 7

 

람다식을 사용한 내림차순

list.Sort((a, b) => b.CompareTo(a));

 

사용자 정의에서의 정렬

정렬 대상이 숫자가 아닌 클래스일 때, 특정 필드를 기준으로 정렬하고 싶다면 이렇게 합니다

class Student
{
    public string Name;
    public int Score;
}

List<Student> students = new List<Student>
{
    new Student { Name = "영희", Score = 85 },
    new Student { Name = "철수", Score = 92 },
    new Student { Name = "민수", Score = 78 }
};

// 점수 내림차순
students.Sort((a, b) => b.Score.CompareTo(a.Score));

 

Sort()

  Sort() 에 넘기는 비교 기준은 두 값을 받아 정수(int) 를 반환하는 함수입니다.

  이 함수는 delegate 또는 람다식으로 만든 대리자여야만 합니다.

 Sort()는 내부적으로 이 비교 함수를 여러 번 호출하면서, 반환값이 0보다 클 때만 두 요소의 자리를 바꿉니다.

  즉, 우리가 넘기는 비교 함수는 이 규칙에 따라 작동하도록 작성해야 합니다.

 

핵심 요약

 배열은 Array.Sort(), 리스트는 .Sort() 를 사용합니다.

 정렬 기준이 없으면 오름차순입니다.

 비교식을 람다식으로 넘기면 다양한 기준으로 정렬 가능합니다.

 구조체 같은 사용자 정의 타입은 필드 기준 정렬도 가능합니다.