문제 풀이/프로그래머스 알고리즘

Arrays.sort() 메서드, 배열 정렬

열심히 해 2024. 11. 9. 15:43

Arrays.sort()

 

Java에서 배열을 오름차순으로 정렬하는 편리한 정적 메서드입니다. 주로 기본 타입 배열과 객체 배열의 정렬에 사용됩니다.

 

사용법: 

 

  • Arrays.sort(array) : 기본적으로 배열을 오름차순으로 정렬합니다.
  • Arrays.sort(array, fromIndex, toIndex) : 배열의 부분 구간 (fromIndex부터 toIndex - 1까지)을 정렬합니다.

 

int배열 정렬

int[] numbers = {5, 3, 8, 1, 2};
Arrays.sort(numbers);  // {1, 2, 3, 5, 8}

// 부분 정렬
int[] numbers = {5, 3, 8, 1, 2};
Arrays.sort(numbers, 1, 4);  // {5, 1, 3, 8, 2}

 

 

 

객체 정렬

String[] names = {"Alice", "Bob", "Charlie"};
Arrays.sort(names);  // 사전순으로 정렬: {"Alice", "Bob", "Charlie"}

 

 

 

커스텀 Comparator 사용

Person[] people = {new Person("Alice", 25), new Person("Bob", 22)};
Arrays.sort(people, (p1, p2) -> Integer.compare(p1.age, p2.age));  // 나이순 정렬

 

 

 

2차원 배열 정렬

int[][] array = { {1, 3}, {2, 2}, {4, 1} };
Arrays.sort(array, (a, b) -> Integer.compare(a[1], b[1]));
// 결과: {{4, 1}, {2, 2}, {1, 3}}

 

여기서 a와 b는 array의 두 요소를 나타냅니다. 각 a와 b는 int[] 타입이므로, 두 번째 요소를 a[1]와 b[1]로 접근할 수 있습니다.

 

** a[1] == b[1]일 때 0 반환 → 순서 유지

 

 

더보기
더보기

Arrays.sort()는 배열의 크기와 타입에 따라 정렬 알고리즘을 다르게 사용합니다.

  • 기본 타입(int, double, etc.) 배열: Dual-Pivot QuickSort 알고리즘을 사용합니다. 평균적으로 O(n log n)의 시간복잡도를 가집니다.
  • 객체 배열: TimSort 알고리즘을 사용하며, O(n log n)의 시간복잡도를 유지합니다. TimSort는 Merge Sort와 Insertion Sort의 혼합 알고리즘으로, 안정 정렬(stable sort) 방식이라 정렬 전 순서를 유지합니다.



관련 문제 : 
https://school.programmers.co.kr/learn/courses/30/lessons/135808