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() 를 사용합니다.
• 정렬 기준이 없으면 오름차순입니다.
• 비교식을 람다식으로 넘기면 다양한 기준으로 정렬 가능합니다.
• 구조체 같은 사용자 정의 타입은 필드 기준 정렬도 가능합니다.
'C#' 카테고리의 다른 글
람다를 이용해 버블 정렬 구현하기 (0) | 2025.07.10 |
---|---|
C#에서 튜플(Tuple)이란? (1) | 2025.07.09 |
구조체 배열 선언 시 메모리에서 일어나는 과정 (1) | 2025.07.02 |
물체를 목표 지점에 정확히 도착시키는 방법 (0) | 2025.07.01 |
Visual Studio 메뉴 폰트 크기 조정 (0) | 2025.07.01 |