자바 알고리즘에서 정렬을 해야할 때, sort() 메서드가 Arrays와 Collections 두 가지로 존재하는 것을 알 수 있다. 같은 정렬 기능을 하지만, 내부 정렬 방식 및 대상에서 차이가 있다.
정렬 알고리즘 | 대상 | 타입 | 시간 복잡도 | |
---|---|---|---|---|
Arrays.sort() | DualPivotQuickSort | 배열 | primitive(기본형), reference(참조형) | 평균: O(nlogn) / 최악: O(n^2) |
Collections.sort() | TimSort(삽입정렬+병합정렬) | 컬렉션(List, Set 등) | reference(참조형) → 클래스의 객체 타입 | 평균, 최악: O(nlogn) |
java.util.Arrays 의 메소드로, 정렬 기준 기본값은 오름차순이다.
→ 숫자 > 대문자 > 소문자 > 한글 순으로 정렬된다.
Arrays.sort(배열 참조변수) // 오름차순
Arrays.sort(배열 참조변수, Collections.reverseOrder()); // 내림차순
java.util.Collections 의 메소드로, sort()는 오름차순, reverse()는 내림차순 정렬을 구현할 수 있다.
→ 한글순 > 소문자 > 대문자 > 숫자 순으로 정렬된다. (*오름차순)
Collections.sort(list); // 오름차순
Collections.reverse(list); // 내림차순
시간복잡도와 효율성에 따라 위 함수를 적절히 사용할 수 있다. 최악의 경우에서 시간 복잡도를 최소화하고 싶다면, primitive 타입의 배열 대신 reference 타입의 배열을 사용해 Arrays.sort()가 TimeSort를 수행할 수 있도록 유동적으로 사용할 수 있다.
즉, 어떤 타입의 배열을 받느냐에 따라 실행되는 정렬 알고리즘이 달라지는 것이므로 시간 단축 시 이를 참고하면 좋다!
https://codingnojam.tistory.com/38